繁体   English   中英

JTable中CheckBox的侦听器

[英]Listener for CheckBox in JTable

我向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行。当我使所有复选框都正确时,我得到的是两次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更改选定状态时,都会触发您的侦听器。

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

主要问题是……您为什么需要附加一个听众?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM