如何为 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 默认使用 BorderLayoutBorderLayout 允许在其五个可用插槽中的每一个中管理单个组件。基本上 BorderLayout 将忽略除最后添加到任何插槽

之外的所有组件

相反,尝试将 LayoutManager 更改为更有用的内容,例如 FlowLayoutGridBagLayout,具体取决于您的需要

查看 Laying Out Components Within a Container 了解更多详情。

根据您的需要,我可能会调和用 JCheckBoxes 代替 String 或什至某种 Map 来填充 ArrayList,以使使用 JCheckBox

更容易 link 文本