如何获取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); } }); 

当我单击复选框时,我想获得所选复选框的索引。

你有一个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 } } } }); 

据我所知,您希望获取所选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教程启发)

在这种情况下,事件将立即触发,您将始终知道刚刚单击了哪个复选框。

通过复选框迭代并检查isSelected标志

我会尝试类似的东西:

 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; 

这样就识别出最近的选择或取消选择复选框。