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メソッドが2回呼び出され、場合によっては1回だけ呼び出されることです。
これはサンプル出力です。(私は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