2011-09-30 121 views
5

哪個監聽器可用於響應JTable單元值更改事件?我嘗試使用TableModelListener,但是我得到了一些錯誤,或者這個監聽器沒有對更改單元格的內容做出反應。JTable單元格值更改監聽器

我需要採取行動改變細胞的內容或失去焦點的細胞。做這個的最好方式是什麼?謝謝。

+3

您的模型實現(或其使用)有問題 - 它必須在更改時通知_always_。 TableModelListener是要走的路 – kleopatra

+0

確實如此。其中一個表更新方法取代了模型,偵聽器被附加到舊模型中。謝謝你保證我看哪個。 – celicni

回答

2

對價值變化做出反應的簡單方法是自定義表模型並對setValueAt()做出反應。

如果您希望在失去焦點時確保編輯「堅持」,請在桌面上調用此選項。

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 
5
class extends JTable { 

.... (內部構造器)

addPropertyChangeListener(new PropertyChangeListener() { 

    @Override 
    public void propertyChange(PropertyChangeEvent evt) { 
     if ("tableCellEditor".equals(evt.getPropertyName())) { 
      if (isEditing()) 
       processEditingStarted(); 
      else 
       processEditingStopped(); 
     } 
    } 
}); 

...(完構造函數)

protected void processEditingStopped() { 
    System.out.println("save " + editingRow + ":" + editingColumn); 
} 

protected void processEditingStarted() { 
    System.out.println("edit " + editingRow + ":" + editingColumn); 
    if (editRow > -1 && editColumn > -1) 
     oldValue = (String) model.getValueAt(editRow, editColumn); 
} 

}

更多的細節在這裏:http://tips4java.wordpress.com/2009/06/07/table-cell-listener/

+0

ehh ...不(從Rob的建議中錯誤地複製;-)在一般情況下哪個不是最好的事情。 – kleopatra

+0

它沒有複製它的解釋 – ungalcrys

+0

重點是_incorrect_(不復制) - 仔細比較詳細信息:-) – kleopatra