2010-02-01 24 views
0

在Java Swing中,我創建了一個JTable,它使用了一個表格模型類DefaultTableModel。由於表格的一行值是布爾型,所以這些顯示爲複選框。正如我想添加到這些複選框的項目監聽器類,我確實需要初始化這些複選框中的每一個。但如果這些是由表模型自動創建的,我該怎麼辦?通過表格模型生成JCheckBoxes時的初始化

回答

2

由於這些複選框會更改基礎數據,因此添加TableModelListener並對該列的tableChanged事件作出反應即可。

jTable1.getModel().addTableModelListener(new TableModelListener() { 
    final int YOUR_BOOLEAN_COLUMN = 1; 
    public void tableChanged(TableModelEvent e) { 
     if(e.getColumn() == YOUR_BOOLEAN_COLUMN) { 
      // get value from model (not affected if user re-orders columns) 
      TableModel tableModel = jTable1.getModel(); 
      Boolean value = 
       (Boolean)tableModel.getValueAt(e.getFirstRow(), YOUR_BOOLEAN_COLUMN); 
      System.out.println(value); 
     } 
    } 
}); 
1

簡短的回答是表有兩個原因,你不能添加的ActionListeners到JCheckboxes:

  1. 使用默認設置,一個JCheckBox的用於呈現所有複選框細胞。
  2. 鼠標單擊包含JCheckBox的表格單元不會傳遞到複選框,它們被表格吸收。

我認爲這很重要,請問爲什麼您需要這些事件?你給出的答案將反映最好的方法。

如果您希望允許用戶編輯複選框的狀態,則最好的方法可能是覆蓋TableModel.isCellEditable(int, int),以便爲複選框列返回true,然後在更新TableModel時更新原始數據。