哪个侦听器可用于响应JTable单元格值更改的事件?我尝试使用TableModelListener但是我得到了一些错误,或者这个监听器没有对更改单元格内容做出反应。
我需要采取行动改变细胞内容或细胞失去焦点。做这个的最好方式是什么?感谢。
答案 0 :(得分: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/
答案 1 :(得分:2)
对价值变化做出反应的简便方法是自定义表格模型并对setValueAt()
做出反应。
如果您想要在失去焦点时确保编辑“坚持”,请在表格中调用此方法。
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
答案 2 :(得分:0)
正如Bill所提到的,“监视”模型比JTable可能更容易,我使用它并能够按列和行跟踪更改:
list.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
System.out.println("Column: " + e.getColumn() + " Row: " + e.getFirstRow());
}
});
正如我在对他们的答案的评论中提到的那样,它不会检测到是否仅对单元格进行了编辑才发生更改。因此,您需要以某种方式检查原始值。但这省去了我的JTable构造函数。