如何从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);
}
});
当我单击复选框时,我想获得所选复选框的索引。
答案 0 :(得分: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 :(得分: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)
在这种情况下,事件将立即触发,您将始终知道刚刚单击了哪个复选框。
答案 2 :(得分: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;
这样就可以识别最近的选择或取消选中复选框。
答案 3 :(得分:0)
遍历复选框并检查isSelected标志