通过循环添加JPanel

让它工作! 感谢你们!
代码如下。 我使用了BoxLayout因为我认为将问题叠加在另一个上是理想的,但现在我遇到了布局问题……当我堆叠几个问题时,问题面板开始重叠。 有什么想法吗?

我想要的......

  panels1 = new MultipleChoice[5]; setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); for(int i=0; i<4; i++){ panels1[i]= new MultipleChoice(); panels1[i].setAlignmentX(CENTER_ALIGNMENT); add(panels1[i]); } setVisible(true); 

我正在设计一个在线测试小程序。
测试有多种选择和真/假问题。 为了设置测试,我创建了两个JPanel类,一个用于多项选择题,一个用于真/假题。 因此,当创建测试时,我将根据非固定数量的问题动态地将这些面板添加到JPanel容器中。

首先,如何动态地将新面板添加到面板? 我想过声明一个JPanel类型的数组。 我使用for循环创建然后添加此面板类的对象:

 MultitipleChoicePanel[] PanelArray; for (...){ PanelArray[i] = new MultipleChoicePanel(); containerpanel.add(PanelArray[i]); } 

我不知道这在技术上是否可行。
这是我第一次使用Swing,我试过这样做,但显然它不起作用。
有没有人知道如何正确动态添加这些面板?

其次,哪个布局管理器最适合容器面板,以便适合在前一个面板下添加的每个新面板?
我想过动态设置一列的GridLayout并在添加面板时添加行。 但我一直在努力动态修改波动。
有什么建议?

非常感谢你的帮助!

JPanel默认布局是FlowLayout ,默认情况下将每个组件添加到右侧,以便它适合您的问题。

你也可能对swingx感兴趣他们有HorizontalLayout

例:

 //in some place JPanel myBigPanel = new JPanel(); myBigPanel.setLayout(new HorizontalLayout()); // swingx api List panelList = new ArrayList<>(); // panelList.add(new MultipleChoicePanel()).. .n times for(MultipleChoicePanel mp : panelList){ myBigPanel.add(mp); } myBigPanel.revalidate(); // revalidate should call repaint but who knows myBigPanel.repaint(); 

如何使用各种布局管理器

如何正确动态添加这些面板?

将组件添加到可见GUI后,您需要执行以下操作:

 panel.add(...); panel.revalidate(); panel.repaint(); 

“然后使用for循环添加此面板类的对象:…..我不知道它是否在技术上可行”

至于一系列面板,我会用一个arraylist来做,并按照你的方式做。

 import java.util.ArrayList; ArrayList array = new ArrayList(); for(...){ array.add(new MultipleChoicePanel()); containerPanel.add(array.get(i)); } 
 import java.awt.*; 

import javax.swing。*;

公共类JavaSwing扩展了JApplet {

 public void init(){ Container content = getContentPane(); JScrollPane pane= new JScrollPane(); JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS)); panel.add(addPanel("title121")); panel.add(addPanel("title112")); panel.add(addPanel("title12")); panel.add(addPanel("title11")); pane.getViewport().add(panel); content.add(pane); } public static JPanel addPanel(String title){ JPanel panel = new JPanel(); panel.add(new JButton(title)); return panel; } 

}