如何为 ArrayList 的元素创建 JCheckBox
How to create JCheckBox for elements of an ArrayList
我有一个由用户填写的数组。然后这个数组的每个元素都是一个 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的大小动态地创建这些复选框吗?
每次您向 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);
主要问题是,您将所有复选框添加到框架上的相同位置。
A JFrame
默认使用 BorderLayout
。 BorderLayout
允许在其五个可用插槽中的每一个中管理单个组件。基本上 BorderLayout
将忽略除最后添加到任何插槽
之外的所有组件
相反,尝试将 LayoutManager
更改为更有用的内容,例如 FlowLayout
或 GridBagLayout
,具体取决于您的需要
查看 Laying Out Components Within a Container 了解更多详情。
根据您的需要,我可能会调和用 JCheckBoxes
代替 String
或什至某种 Map
来填充 ArrayList
,以使使用 JCheckBox
更容易 link 文本
我有一个由用户填写的数组。然后这个数组的每个元素都是一个 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的大小动态地创建这些复选框吗?
每次您向 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);
主要问题是,您将所有复选框添加到框架上的相同位置。
A JFrame
默认使用 BorderLayout
。 BorderLayout
允许在其五个可用插槽中的每一个中管理单个组件。基本上 BorderLayout
将忽略除最后添加到任何插槽
相反,尝试将 LayoutManager
更改为更有用的内容,例如 FlowLayout
或 GridBagLayout
,具体取决于您的需要
查看 Laying Out Components Within a Container 了解更多详情。
根据您的需要,我可能会调和用 JCheckBoxes
代替 String
或什至某种 Map
来填充 ArrayList
,以使使用 JCheckBox