通过循环添加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; }
}