java - JTable 中复选框的监听器

标签 java swing jtable jcheckbox itemlistener

我正在向 JTable 中的 JCheckBox 添加一个监听器。我在使用以下代码时遇到问题,

public class CheckBoxEditor extends DefaultCellEditor implements ItemListener {

private static final long serialVersionUID = 1L;
private JCheckBox checkBox;

private int row;
private int column;

public CheckBoxEditor(JCheckBox checkBox) {
    super(checkBox);
    this.checkBox = checkBox;
    this.checkBox.addItemListener(this);
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value,
        boolean isSelected, int row, int column) {
    this.row = row;
    this.column = column;
    checkBox.setSelected((Boolean) value);
    return super.getTableCellEditorComponent(table, value, isSelected, row, column);
}

public void itemStateChanged(ItemEvent e) {
    this.fireEditingStopped();
    System.out.println("Item Changed " + row + " value is: " + checkBox.isSelected());
}

}

并且在我使用上面的类中,

tableA.getColumnModel().getColumn(4).setCellEditor(new CheckBoxEditor(new JCheckBox()));

每当我单击列中的复选框时,我都会到达 itemStateChanged 方法。问题是,在选择复选框时,我的 itemStateChanged 方法调用两次,有时只调用一次。

这是示例输出。(我有 5 行。当我将所有复选框设为 true 时,我会得到双 syso 打印。)

Item Changed 0 value is: true

Item Changed 1 value is: false

Item Changed 1 value is: true

Item Changed 2 value is: false

Item Changed 2 value is: true

Item Changed 3 value is: false

Item Changed 3 value is: true

Item Changed 4 value is: false

Item Changed 4 value is: true

最佳答案

当您点击复选框时,以及通过 API 更改所选状态时,您的监听器都会被触发。

由于编辑器始终重复使用相同的复选框,因此它会不断更新所选值。

主要问题是......为什么你需要附加一个监听器?

关于java - JTable 中复选框的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13322238/

相关文章:

java - 无法从另一个 jFrame 获取值

java - eclipse 中的 JTable 不显示列名

java - Android SD 卡在模拟器上写入失败并出现 IOException EROFS(只读文件系统),具有正确的权限

java - (==) 在 hashCode 方面的功能

java - 如何获取客户端计算机操作系统的用户友好名称?

java - 单击按钮时数据库查询未执行

java - 我如何调用一个声明 ArrayList 并从另一个方法引用变量的方法?

java - 如何设置按钮上的文字颜色? java

Java Eclipse Jtable 单元格/列

java - 自定义渲染器中单元格内容的 JTable 对齐