2015-02-08 60 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

相關問題