我有一个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]);
}
}
答案 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