1

让它工作!感谢你们!
代码如下。我使用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根据非固定数量的问题将这些面板动态添加到容器中。

首先,如何将新面板动态添加到面板中?我考虑过声明一个类型的数组JPanelfor我使用循环创建并添加了这个面板类的对象:

MultitipleChoicePanel[] PanelArray;

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

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

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

非常感谢你的帮助!

4

4 回答 4

5

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

您也可能对他们拥有的swingxHorizontalLayout感兴趣。

例子:

//in some place
 JPanel myBigPanel = new JPanel();
 myBigPanel.setLayout(new HorizontalLayout()); // swingx api

List<MultitipleChoicePanel> 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();

如何使用各种布局管理器

于 2013-07-12T18:10:44.940 回答
3

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

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

panel.add(...);
panel.revalidate();
panel.repaint();
于 2013-07-12T18:06:48.137 回答
1

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

至于面板数组,我会使用 arraylist 来完成,并且与您的操作方式类似。

import java.util.ArrayList;

ArrayList<MultipleChoicePanel> array = new ArrayList<MultipleChoicePanel>();
for(...){
     array.add(new MultipleChoicePanel());
     containerPanel.add(array.get(i));
}
于 2013-07-12T18:06:54.043 回答
1
import java.awt.*;

导入 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;
}

}

于 2013-07-12T20:58:01.447 回答