使用for循环将JPanel添加到JFrame

时间:2013-10-17 22:39:00

标签: java swing jframe jpanel jlabel

我有一个JPanel,窗口以及一系列JPanel和JLabel。我想向JFrame添加5个JPanel,为每个JPanel添加JLabel。每个JPanel将用于表示有关Dice的数据。

然而,当我运行代码时,只有最后一个JPanel出现在JFrame上,文本为“Dice 4”。我不明白为什么。

代码:

public static void main(String args[]) {

    JFrame window = new JFrame("DICE Frame");
    window.setVisible(true);
    window.setTitle("DIE");
    window.setSize(400, 200);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel[] diceView=new JPanel[5];
    JLabel[] labels=new JLabel[5];
    for(int i=0; i<diceView.length; i++) {

        diceView[i]=new JPanel();

        window.add(diceView[i]);

        labels[i]=new JLabel();
        labels[i].setText("Dice "+i);
        diceView[i].add(labels[i]);

    }
}

3 个答案:

答案 0 :(得分:3)

JFrame的contentPane(在调用JFrame#add(...)时添加的内容)默认情况下使用BorderLayout,每当您以默认方式向其添加组件时,组件都会添加BorderLayout.CENTER。

解决方案是将您的其他JPanel添加到JPanel,该JPanel使用您认为必要的任何布局(或使用布局的嵌套JPanel),然后将此容器JPanel添加到您的JFrame,BorderLayout.CENTER。

有关详细信息,请查看Layout Manager Tutorial。要理解的一个关键概念是,您可以嵌套JPanel,每个都使用自己的简单布局管理器,从而使用简单易用的布局管理器实现复杂的布局。

答案 1 :(得分:2)

因为你的JPanels反复添加和Dice 0,Dice 1,Dice 2,Dice 3保持在Dice 4下,因此你只能看到Dice 4.如果你想看到其他Dices那么你应该使用像flowlayout,boxlayout这样的布局......

答案 2 :(得分:2)

您的JFrame指定了默认BorderLayout。尝试使用不同的布局,如下所示:

window.setLayout(new FlowLayout());

您将看到其他JPanel。 Check this out for more detailed info