2012-09-03 110 views
3

如何從JCheckbox?中獲取選定的索引(從jcheckbox添加到屏幕中使用for循環)。如何獲取JCheckbox的選定索引?

// for some t values: 
checkBoxes[t] = new JCheckBox("Approve"); 
checkBoxes[t].addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     boolean selected = checkBoxes[t].isSelected(); 
     System.out.println("Approved"+selected); 
    } 
}); 

當我點擊複選框時,我想要獲取所選複選框的索引。

+1

這是一個令人困惑的請求,因爲JCheckBox沒有索引。你的意思是使用一組JRadioButtons嗎?或者也許是一個JComboBox?或者如果你有一個數組或集合,你可以迭代它們並找出哪些已經被選中,我想。 –

+1

向我們展示一些代碼。 –

回答

4

你有一個JCheckBox數組,你可以簡單地遍歷你的數組,並找出哪個JCheckBox已被選中。

關於:

當我點擊複選框,我想選擇的複選框的指數。

編輯:你會發現通過使用傳遞給ActionListener的ActionEvent的getSource()方法選擇了哪個複選框。例如,你可以你的ActionListener改變如下:

checkBoxes[t].addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
    boolean selected = checkBoxes[t].isSelected(); 
    System.out.println("Approved"+selected); 

    int index = -1; 
    for (int i = 0; i < checkBoxes.length; i++) { 
     if (checkBoxes[i] == e.getSource()) { 
     index = i; 
     // do something with i here 
     } 
    } 
    } 
}); 
+1

這確實是一種方法。另一種可能性是將'JCheckBox'的'actionCommand'設置爲索引,並檢索它。或者將索引傳遞給偵聽器的構造函數。 – Robin

+0

@Robin,true,但上面的方式允許所有JComboBox使用相同的偵聽器(如果有問題,我不確定)。 –

+0

+1另請參閱此[示例](http:// stackoverflow。com/a/4528604/230513)在'JTable'上下文中維護狀態。 – trashgod

0

我會嘗試這樣的:

for (int i=0; i < checkBoxes.length; i++) { 
if (checkBoxes[i].isSelected() == true) { 
index = i; } 
return index; } 

從你的問題,這是我收集你所期待的。

編輯:

我上面以前的方法是有缺陷的,因爲它使非常幼稚的做法有且只有一個框將被選中,並且沒有框將被取消。

其中「E」是ActionEvent對象,

for (int i=0; i < checkBoxes.length; i++) { 
if (checkBoxes[i] == e.getSource()) { 
index = i; } } 
return index; 

這樣,最近的選擇或取消選擇複選框被識別。

+0

如果他取消選擇某個複選框,或者某些複選框已被選中,那麼這將不起作用 – Robin

+0

好的呼叫。你肯定會在ActionEvent對象上使用'getSource()'來確定哪個按鈕被按下了。我的第一個想法是有缺陷的,即如果它已經被選中或被取消選擇,它將不起作用。我只是把它看作是一項完成的工作。 –

1

據我瞭解,你想獲得一個選擇JCheckBox的指數,以對用戶的動作做出相應的反應。

如果是這種情況,您可能需要考慮一種不同的方法:您可以爲每個複選框註冊一個ItemListener

JCheckBox check = new JCheckBox("Approve"); 
check.addItemListener(new ItemListener() { 
    public void itemStateChanged(ItemEvent e) { 
    if (check.isSelected()){ 
     System.out.println(check.getName() + " is selected"); 
    } 
    } 
}); 

(由java2s.com tutorial啓發)

在這種情況下,該事件將被立即解僱,你將永遠知道該複選框只是點擊。

相關問題