哪個監聽器可用於響應JTable單元值更改事件?我嘗試使用TableModelListener,但是我得到了一些錯誤,或者這個監聽器沒有對更改單元格的內容做出反應。JTable單元格值更改監聽器
我需要採取行動改變細胞的內容或失去焦點的細胞。做這個的最好方式是什麼?謝謝。
哪個監聽器可用於響應JTable單元值更改事件?我嘗試使用TableModelListener,但是我得到了一些錯誤,或者這個監聽器沒有對更改單元格的內容做出反應。JTable單元格值更改監聽器
我需要採取行動改變細胞的內容或失去焦點的細胞。做這個的最好方式是什麼?謝謝。
對價值變化做出反應的簡單方法是自定義表模型並對setValueAt()
做出反應。
如果您希望在失去焦點時確保編輯「堅持」,請在桌面上調用此選項。
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
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/
您的模型實現(或其使用)有問題 - 它必須在更改時通知_always_。 TableModelListener是要走的路 – kleopatra
確實如此。其中一個表更新方法取代了模型,偵聽器被附加到舊模型中。謝謝你保證我看哪個。 – celicni