出于某种原因,我的JFrame不会显示两者中的任何一个。 请注意,我的JFrame是在另一个类中创建的,并从中进行访问。 另外,如果可以的话,我想了解我的代码如何呈现和设计的提示?
import java.awt.BorderLayout;
import java.util.ArrayList;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
public class GuiDrugContents {
private JPanel panel;
public GuiDrugContents(ArrayList<String> drug_names){
// Firstly create the panel for the checkboxes to be held.
JPanel panel = new JPanel(new BorderLayout());
this.panel = panel;
testmain.frame.add(panel);
// Now create an array list of checkboxes.
ArrayList<JCheckBox> checkboxes = new ArrayList<JCheckBox>();
checkboxes = getCheckBoxes(drug_names);
// Now add the JPanel to the JFrame
testmain.frame.add(panel);
// Now add these checkboxes to the JPanel.
addCheckBoxes(checkboxes);
testmain.frame.repaint();
}
/**
* Takes an array list of JCheckBoxes and adds each one to the panel.
*/
private void addCheckBoxes(ArrayList<JCheckBox> checkboxes) {
for(JCheckBox checkbox: checkboxes){
panel.add(checkbox);
}
}
/**
* Takes the array list of drug names as strings and makes an array list
* of JCheckBoxes out of these.
* @param drug_names
* @return
*/
private ArrayList<JCheckBox> getCheckBoxes(ArrayList<String> drug_names) {
ArrayList<JCheckBox> arraylist = new ArrayList<JCheckBox>();
for(String drug_name: drug_names){
JCheckBox checkbox = new JCheckBox(drug_name);
arraylist.add(checkbox);
}
return arraylist;
}
}
答案 0 :(得分:1)
如@MadProgrammer所述,您的小组正在使用BorderLayout
,您可能希望使用BoxLayout
垂直放置它们。
我创建了这个示例,它为复选框创建了一个水平对齐或垂直对齐,具体取决于您评论的哪一行。
FlowLayout
用于水平对齐
BoxLayout
用于垂直对齐
来自你的评论:
我尝试重新验证它,它的完成只是创建了最后一个CheckBox ...是不是因为CheckBox对象无法在循环中创建,因为下一个CheckBox只是替换了之前的?我想是的..
同样@MadProgrammer已在他的评论中回答,是的,你可以在循环中创建它们,这就是我在下面的例子中所做的:
import java.awt.*;
import javax.swing.*;
public class CheckBoxesInALoop {
JFrame frame;
JCheckBox box;
JPanel boxPane, buttonPane;
JButton button;
public static void main (String args[]) {
new CheckBoxesInALoop();
}
public CheckBoxesInALoop() {
frame = new JFrame("Boxes added in a loop");
boxPane = new JPanel();
buttonPane = new JPanel();
button = new JButton("I do nothing");
boxPane.setLayout(new FlowLayout()); //Horizontal add
//boxPane.setLayout(new BoxLayout(boxPane, BoxLayout.PAGE_AXIS)); //Vertical add
for (int i = 0; i < 5; i++) { //Change for your array list boxes
box = new JCheckBox("I am the " + (i + 1) + " checkbox"); //we re use the same "box" object (similar to your arraylist)
boxPane.add(box);
}
buttonPane.add(button);
frame.add(boxPane, BorderLayout.PAGE_START);
frame.add(buttonPane, BorderLayout.PAGE_END);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}