我有一个由用户填写的数组。然后这个数组的每个元素都是一个CheckBox。例如,如果数组有6个元素,则必须创建6个复选框。
这是我尝试遍历数组并创建复选框的方式,但它只覆盖一个复选框。
public static void main(String[] args) {
JFrame frame = new JFrame("Options");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
ArrayList<String> myArrayList = new ArrayList<String>();
myArrayList.add("checkbox 1");
myArrayList.add("checkbox 2");
myArrayList.add("checkbox 3");
myArrayList.add("checkbox 4");
myArrayList.add("checkbox 5");
for(String element : myArrayList){
JCheckBox box = new JCheckBox(element);
frame.add(box);
}
frame.setVisible(true);
}
我稍后可以访问每个单一复选框,这一点非常重要,因此我可以指定例如if checkbox2 is selected, do this
。
那么有没有办法根据ArrayList的大小动态制作这些复选框?
答案 0 :(得分:1)
每次向JFrame添加新内容时,都会删除之前的内容。
您需要创建一个JPanel或其他容器来容纳JCheckBox,然后将其放在JFrame中。
此外,您可以跟踪列表中的复选框。
例如:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(BoxLayout.Y_AXIS, panel));
List<JCheckBox> checkboxes = new ArrayList<>();
for(String element : myArrayList) {
JCheckBox box = new JCheckBox(element);
checkboxes.add(box);
panel.add(box);
}
frame.add(panel);
答案 1 :(得分:1)
主要问题是,您将所有复选框添加到框架上的相同位置。
JFrame
默认使用BorderLayout
。 BorderLayout
允许在其五个可用插槽中的每一个中管理单个组件。基本上BorderLayout
将忽略除了添加到任何插槽的最后一个组件之外的所有组件
相反,请尝试将LayoutManager
更改为更有用的内容,例如FlowLayout
或GridBagLayout
,具体取决于您的需求
请查看Laying Out Components Within a Container了解详情。
根据您的需求,我可能会调整ArrayList
填充JCheckBoxes
而不是String
甚至是某种Map
,以便更轻松将文字与JCheckBox