Проблемы с JFrame и JPanel - PullRequest
       7

Проблемы с JFrame и JPanel

2 голосов
/ 18 февраля 2011

Я пытаюсь создать программу для местного магазина бубликов, где продаются выпечка, бублики и кофе. У меня проблемы с внедрением панелей, которые я сделал в JFrame

любая помощь в понимании того, как сделать так, чтобы мой JFrame выглядел так, была бы полезна

Как только у меня будет эта работа, я надеюсь, что средний набор панелей изменится в зависимости от того, какой продукт выбран. Я не совсем уверен, как заставить кнопки и панели общаться друг с другом.

Спасибо за помощь!

вот мой код для JFrame.

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class BagelOrder extends JFrame
{   
JLabel topLabel;

sizePanel sp = new sizePanel();
typePanel tp = new typePanel();
productsPanel pp = new productsPanel();
buttonPanel bp = new buttonPanel();
extrasPanel ep = new extrasPanel();

public BagelOrder()
{
    setTitle("Order Entry Screen");
    setSize(800, 800);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    topLabel = new JLabel("Order Entry Screen");
    add(pp, BorderLayout.WEST);
    add(topLabel, BorderLayout.NORTH);
    add(bp, BorderLayout.SOUTH);
    add(middleCoffeePanelSetBuild(), BorderLayout.CENTER);
    add(east, BorderLayout.EAST);
    setVisible(true);

}

private JPanel middleCoffeePanelSetBuild()
{
    JPanel middlePanel = new JPanel(new GridLayout(3,1));
    add(sp);
    add(tp);
    add(ep);

    }

public static void main(String args[])
{
    BagelOrder bo = new BagelOrder();
}



} 

У меня нет ошибок, но я не вижу ничего, кроме метки в верхней части страницы.

вот мой код для других классов

ButtonPanel

import java.awt.GridLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JPanel;


public class buttonPanel extends JPanel
{
JButton enterItemButton;
JPanel buttonPanel;
ButtonGroup bg;
JButton totalButton;
JButton newOrderButton;


public buttonPanel()
{
    buttonPanel = new JPanel(new GridLayout(1,3));
    bg = new ButtonGroup();
    enterItemButton = new JButton("Enter Item");
    totalButton = new JButton("Total");
    newOrderButton = new JButton("New Order");

    buttonPanel.setSize(150, 780);
    buttonPanel.add(enterItemButton);
    bg.add(enterItemButton);
    buttonPanel.add(totalButton);
    bg.add(totalButton);
    buttonPanel.add(newOrderButton);
    bg.add(newOrderButton);
    setVisible(true);   

}
}

ProductPanel

import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.Border;


public class productsPanel extends JPanel
{
public productsPanel()
{
    JPanel productPanel = new JPanel(new GridLayout(3,1));
    ButtonGroup bg = new ButtonGroup();
    JRadioButton coffeeButton = new JRadioButton("Coffee");
    JRadioButton bagelButton = new JRadioButton("Bagel");
    JRadioButton pastryButton = new JRadioButton("Pastry");

    productPanel.setSize(150, 780);
    productPanel.add(coffeeButton);
    bg.add(coffeeButton);
    productPanel.add(bagelButton);
    bg.add(bagelButton);
    productPanel.add(pastryButton);
    bg.add(pastryButton);

    Border etched = BorderFactory.createEtchedBorder();
    Border titled = BorderFactory.createTitledBorder(etched, "Products");
    productPanel.setBorder(titled);
    setVisible(true);   
}
}

Размер панели

import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.Border;


public class sizePanel extends JPanel{

public sizePanel()
{
    JPanel sp = new JPanel(new GridLayout(3,1));
    ButtonGroup bg = new ButtonGroup();
    JRadioButton smallButton = new JRadioButton("Small");
    JRadioButton mediumButton = new JRadioButton("Medium");
    JRadioButton largeButton = new JRadioButton("Large");

    sp.setSize(200, 200);
    sp.add(smallButton);
    bg.add(smallButton);
    sp.add(mediumButton);
    bg.add(mediumButton);
    sp.add(largeButton);
    bg.add(largeButton);


    Border etched = BorderFactory.createEtchedBorder();
    Border titled = BorderFactory.createTitledBorder(etched, "Size");   
    sp.setBorder(titled);
    setVisible(true);   
}
}

TypePanel

import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.Border;


public class typePanel extends JPanel
{
public typePanel()
{
    JPanel typePanel = new JPanel(new GridLayout(3,1));
    ButtonGroup bg = new ButtonGroup();
    JRadioButton regularButton = new JRadioButton("Regular");
    JRadioButton decafButton = new JRadioButton("Decaf");
    JRadioButton frenchRoastButton = new JRadioButton("French Roast");

    typePanel.setSize(200, 200);
    typePanel.add(regularButton);
    bg.add(regularButton);
    typePanel.add(decafButton);
    bg.add(decafButton);
    typePanel.add(frenchRoastButton);
    bg.add(frenchRoastButton);


    Border etched = BorderFactory.createEtchedBorder();
    Border titled = BorderFactory.createTitledBorder(etched, "Type");   
    typePanel.setBorder(titled);
    setVisible(true);   
}
}

ExtrasPanel

 import java.awt.GridLayout;
 import javax.swing.BorderFactory;
 import javax.swing.JCheckBox;
 import javax.swing.JPanel;
 import javax.swing.border.Border;


public class extrasPanel extends JPanel
{
public extrasPanel()
{
    JPanel extrasPanel = new JPanel(new GridLayout(2,1));

    JCheckBox creamCheckBox = new JCheckBox("Cream");
    JCheckBox sugarCheckBox = new JCheckBox("Sugar");   

    extrasPanel.setSize(200, 200);
    extrasPanel.add(creamCheckBox);
    extrasPanel.add(sugarCheckBox);

    Border etched = BorderFactory.createEtchedBorder();
    Border titled = BorderFactory.createTitledBorder(etched, "Extras");
    extrasPanel.setBorder(titled);
    setVisible(true);
}
}

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

Некоторые полезные практики, которые нужно использовать при написании графического интерфейса для Swing:

1) Ваши классы Panel построены неправильно. Вам нужно переписать buttonPanel и все остальные, чтобы они выглядели так:

public buttonPanel() {
    super(new GridLayout(1,3));
    bg = new ButtonGroup();
    enterItemButton = new JButton("Enter Item");
    totalButton = new JButton("Total");
    newOrderButton = new JButton("New Order");

    this.setSize(150, 780);
    this.add(enterItemButton);
    bg.add(enterItemButton);
    this.add(totalButton);
    bg.add(totalButton);
    this.add(newOrderButton);
    bg.add(newOrderButton);
    this.setVisible(true);

    }
}

То, как ваш в настоящее время написан, у вас есть класс ButtonPanel (всегда с заглавными буквами), который обладает JPanel с кнопками на нем, но он никогда не отображает этот JPanel, которым он владеет. Вам нужна ButtonPanel, чтобы БЫТЬ JPanel, а не просто иметь ее. Это главная проблема. Незначительные очки, которые вы могли бы улучшить:

2) JFrame имеет JPanel, который называется contentPane. Как сказал jzd, при использовании JFrame.add вы действительно вызываете JFrame.getContentPane.add (Компонент c). Это удобный метод, но он скрывает то, что вы действительно делаете. Особенно, когда вы только учитесь, ярлыки плохие.

Лично я иду на шаг дальше, начиная свой JFrames с

JPanel content = new JPanel(new BorderLayout());
content.add(...);
....
this.setContentPane(content);

3) Хорошая практика при расширении класса (например, JFrame) начинаться с вызова super (). Опять же, вы можете оставить это как стенографию, но хорошо быть педантичным в начале. Это вызывает конструктор суперкласса (с любыми необходимыми аргументами), который в основном говорит: «Давайте создадим базовый JFrame, а затем применим к нему мои расширения».

4) Полезно также использовать заглавные буквы в ваших классах и начинать все функции со строчных букв. т.е. ButtonPanel или build ()

5) Кажется, вы только начинаете работать с графическим интерфейсом, но я мог бы рекомендовать внешнюю библиотеку "MigLayout" (Google google). Он удивителен дополнительными возможностями и простотой, которые он дает вам в борьбе со всеми встроенными в Java ужасными типами макетов.

0 голосов
/ 18 февраля 2011

Они общаются друг с другом с помощью интерфейса ActionListener, метода ActionPerformed(ActionEvent e), и для запуска этих методов вам нужно <the component to be listened to>.addActionListener(theListener);

...