如何为ArrayList的元素创建JCheckBox

时间:2015-02-08 02:01:11

标签: java checkbox 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的大小动态制作这些复选框?

2 个答案:

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

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

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

根据您的需求,我可能会调整ArrayList填充JCheckBoxes而不是String甚至是某种Map,以便更轻松将文字与JCheckBox

相关联