Java 如何将自定义jPanel多次添加到jFrame?

Java 如何将自定义jPanel多次添加到jFrame?,java,swing,layout,jframe,jpanel,Java,Swing,Layout,Jframe,Jpanel,我用一个JComboBox和两个JTextField控件制作了JPanel类 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 GridLayo

我用一个
JComboBox
和两个
JTextField
控件制作了
JPanel

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中获取值。

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

建议:将ComparsonPanel对象添加到p JPanel,然后将单个组件添加到contentPane。i、 e

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);

更妙的是,请阅读。

谢谢你,效果很好。我是java新手(与c#一起工作)。我将在最后添加一个按钮,从我添加的所有字段中获取值。什么是最好的方法?@LifeH2O:阅读布局管理器教程,尝试使用布局管理器实现尽可能最好的GUI。请注意,通常最好使用各自的布局管理器嵌套JPanel。然后试着做你的程序,一步一个问题,直到解决。我正在阅读教程,但在我的情况下,用户界面不是真正的问题。我需要得到他在我添加的每个jPanel上选择的值。