2015-02-08 76 views
0

我有一个由用户填充的数组。然后这个数组的每个元素将是一个CheckBox。例如,如果数组有6个元素,则它必须创建6个复选框。如何为ArrayList的元素创建JCheckBox

这是我试图循环访问数组并创建复选框的方式,但它只覆盖一个复选框。

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的大小动态地生成这些复选框吗?

+1

文字链接创建另一个ArrayList中,和用它来存储对复选框的引用。 – immibis 2015-02-08 02:01:50

回答

1

每当您向JFrame添加新内容时,它都会删除之前的内容。

您需要创建一个JPanel或其他容器来容纳JCheckBoxes,然后将其放入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); 
+0

感谢您的解决方案。似乎工作。只有两件事。 'List checkboxes = new ArrayList <>();'出现一个错误:_type List不接受parameteres_。你也可以举一个访问这个复选框之一的例子吗?像'checkbox2.setEnabled(false);' – Dan 2015-02-08 02:20:15

+1

@dan你想要导入“java.util.List”而不是“java.awt.List”;您可以使用get方法访问列表中的元素。我建议你看一下[收藏曲目](http://docs.oracle.com/javase/tutorial/collections/) – MadProgrammer 2015-02-08 02:50:24

1

的主要问题是,你将所有的复选框,在框架上的同一位置。

A JFrame默认使用BorderLayout。 A BorderLayout允许在其五个可用插槽中的每一个中管理单个组件。基本上一个BorderLayout会不顾一切,但添加到任何插槽

的最后一个组件相反,尝试改变LayoutManager或更有用的东西,像FlowLayoutGridBagLayout根据您的需要

看看Laying Out Components Within a Container更多细节。

根据您的需求,我可能会得到锻炼,以填补ArrayListJCheckBoxes,而不是String甚至某种形式的Map,以使其更容易与JCheckBox