如何多次向jFrame添加自定义jPanel?

时间:2014-03-24 21:55:09

标签: java swing layout jframe jpanel

我使用JPanel和两个JComboBox控件制作了JTextField课程。

JFrame f = new JFrame();
JPanel p = new JPanel();
ComparisonPanel cp = new ComparisonPanel(); //jPanel with a few elements
ComparisonPanel cp2 = new ComparisonPanel();

p.setLayout(new FlowLayout()/*new GridLayout(2, 2)*/);

f.getContentPane().add(cp);
f.getContentPane().add(cp2/*cp*/);
f.setVisible(true);

它只显示ComparisonPanel一次。我实际上是想在运行时生成一个GUI,面板将通过一些修改(不同的标签等)重复,然后从这个动态生成的GUI中获取值。

1 个答案:

答案 0 :(得分:5)

您正在设置p的布局,而不是您尝试将JPanel添加到的容器的布局,即contentPane,默认情况下使用BorderLayout的容器。 BorderLayout使用容器只会显示添加的所有最后一个组件(以默认方式),这会搞砸你。

建议:将您的ComparsonPanel对象添加到p JPanel,然后将那个单个组件添加到contentPane。即,

JFrame f = new JFrame();
JPanel p = new JPanel();
ComparisonPanel cp = new ComparisonPanel(); //jPanel with a few elements
ComparisonPanel cp2 = new ComparisonPanel();

p.setLayout(new FlowLayout()/*new GridLayout(2, 2)*/);

p.add(cp);
p. add(cp2);
f.getContentPane().add(p);
f.pack();
f.setVisible(true);

更好的是,请阅读layout manager tutorials