让它发挥作用!谢谢你们!
代码如下。我使用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
并在添加面板时添加行。但我一直在努力动态修改波动。
有什么建议吗?
非常感谢你的帮助!
答案 0 :(得分:4)
JPanel
默认布局为FlowLayout
,默认情况下会将每个组件添加到右侧,以便它适合您的问题。
您也可能对swingx HorizontalLayout
感兴趣。
示例:
//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();
答案 1 :(得分:3)
如何正确动态添加这些面板?
将组件添加到可见的GUI后,您需要执行以下操作:
panel.add(...);
panel.revalidate();
panel.repaint();
答案 2 :(得分:1)
“然后使用for循环添加此面板类的对象:.....我不知道它是否在技术上可行”
就一系列面板而言,我会用一个arraylist来做,并按照你的方式进行。
import java.util.ArrayList;
ArrayList<MultipleChoicePanel> array = new ArrayList<MultipleChoicePanel>();
for(...){
array.add(new MultipleChoicePanel());
containerPanel.add(array.get(i));
}
答案 3 :(得分: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;
}
}