java swing多个jpanels

时间:2014-04-11 15:18:34

标签: java swing jpanel

基本上我想要做的就是画两排按钮用于熄灯游戏(家庭作业),但我不知道如何让两个面板都显示出来。我以前几乎没有任何图形,我也不会理解我正在做的任何事情。 他们自己的面板工作,但它只显示我添加的第二个(我假设它覆盖了前一个面板)

public static void main(String[] args) {
    String nButtonsString = JOptionPane.showInputDialog("How many buttons would you like?");
    int nButtons = Integer.parseInt(nButtonsString);
    JFrame myFrame = new JFrame();

    myFrame.setTitle("Linear Lights Out Game.");
    myFrame.setSize(FRAME_SIZE);    


    JPanel control_buttons = new Linear_Controls();
    myFrame.add(control_buttons);

    JPanel lights = new LinearLightsPanel(nButtons);
    myFrame.add(lights);

    myFrame.pack();
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myFrame.setVisible(true);

2 个答案:

答案 0 :(得分:2)

myFrame.add(control_buttons);
myFrame.add(lights);

默认情况下,JFrame使用BorderLayout。此外,默认情况下,组件会添加到BorderLayout的CENTER。但是,CENTER只能包含单个组件,因此仅显示添加的最后一个组件。尝试:

myFrame.add(control_buttons, BorderLayout.NORTH);

现在应该显示两个组件。

阅读Using Layout Managers上Swing教程中的部分,了解更多信息和示例。另请查看Trail/Table of Contents链接,了解基本Swing用法的其他有用主题。

答案 1 :(得分:0)

您必须创建2个面板A和B并将它们添加到另一个面板C.然后将C添加到您的框架中。

更好一点解释:这就是你现在所拥有的:

JPanel lights = new LinearLightsPanel(nButtons);
myFrame.add(lights);

但你想要像:

JPanel lightsA = new LinearLightsPanel(nButtonsA);
JPanel lightsB = new LinearLightsPanel(nButtonsB);

JPanel lightsC = new JPanel();
lightsC.add(lightsA);
lightsC.add(lightsB);

myFrame.add(lightsC);