2011-02-18 79 views
2

我正在尝试制作一个销售糕点,百吉饼和咖啡的当地百吉饼店的计划。我无法实现我所做成的JFrameJFrame和JPanel问题

任何了解如何使我的JFrame看起来像这将是有益的帮助下,面板http://kepler.covenant.edu/COS150/Bagel_files/image002.jpg

一旦我有这个工作,我希望能有中间套面板会根据所选产品而变化。我不完全确定如何使按钮和面板互相交谈。

感谢您的帮助!

这是我迄今为止的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); 
} 
} 

回答

4

一些好的做法,以进入方法Swing GUI:

1)您的面板类构建错误。 你需要重新写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类(总是大写类),这posseses一个JPanel与它的按钮,但它永远不会显示它拥有的这个JPanel。你需要ButtonPanel是一个JPanel,而不仅仅是一个。 那是主要问题。小结点可以改进:

2)JFrame有一个名为contentPane的JPanel。正如jzd所说,当使用JFrame.add时,您确实调用了JFrame.getContentPane.add(Component c)。这是一种方便的方法,但它隐藏了你真正在做的事情。特别是当你刚刚学习时,快捷方式很糟糕。

我亲自去了一步,开始我JFrames了与

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

3)扩展一个类(如JFrame中时,它是很好的做法),开始与超()的调用。再说一遍,你可以把它简写成简写,但是开始的时候它很好学。这会调用超类的构造函数(无论您需要什么参数),它基本上都是这样说的:“让我们创建基本的JFrame,然后再应用我的扩展”。

4)它也是一个很好的做法,以大写你的类,并开始所有功能与小写动词。即ButtonPanel或构建()

5)看起来你只是刚刚开始与GUI,但我可以推荐外部库“MigLayout”(谷歌它)。它的超强力和易用性令人惊叹,它让您可以反抗所有Java内置,可怕的布局类型。

0

他们跟海誓山盟与ActionListener接口,ActionPerformed(ActionEvent e)方法,并以解雇那些你写作时需要<the component to be listened to>.addActionListener(theListener);