3

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

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

4

4 回答 4

4

您有一个 JCheckBox 数组,您可以简单地遍历您的数组并找出选择了哪个 JCheckBox。

关于:

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

getSource()编辑:您会发现使用传递给 ActionListener 的 ActionEvent的方法选择了哪个复选框。例如,您可以将 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
      }
    }
  }
});
于 2012-09-03T12:11:45.263 回答
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 教程

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

于 2012-09-03T12:51:21.587 回答
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; 

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

于 2012-09-03T12:34:57.570 回答
0

遍历复选框并检查isSelected标志

于 2012-09-03T12:36:56.683 回答