当新值不正确时,重置JTable单元格中的旧值



我有一个JTable来输入一些特定范围内的数字。当它们超过该范围时,就会出现异常以显示错误。当你输入其他字符或者什么都不输入

当这些事情发生时,我想要得到原来的值。我想做一个监听器,当一个单元格得到焦点时警告我(我的意思是当单元格打开输入值时)。然后我会保存这个值,如果出现问题,我就可以再次输入这个值了。

我已经搜索了一段时间,但我还没有看到做这个监听器的方法。我该怎么做呢(或者用另一种方式)?

表模型(AbstractTableModel的子类)将进行验证。

当JTable被更新时,它执行对

的调用
public void setValueAt(Object aValue, int rowIndex, int columnIndex)

验证那里的值,如果它与范围不匹配,就不要在模型的实现中更新它。在调用setValueAt()之后,表从model(通过调用getValueAt())重新读取值,因此原始内容返回到表中。

http://www.java2s.com/Code/JavaAPI/javax.swing.table/implementsTableCellEditor.htm

看到stopCellEditing ()来自Javadoc:

"告诉编辑器停止编辑并接受任何部分编辑的值作为编辑器的值。如果编辑未停止,则编辑器返回false;这对于验证且不能接受无效条目的编辑器很有用。"

这里有一个更好的解决方案:使用数据模型。您的模型包含这些值。

当表呈现时,从你的模型中获取值。

当用户编辑单元格时,取当前值。编辑成功后,将新值放入模型中。如果编辑失败,只需刷新单元格:渲染器将从模型中获取未修改的值,然后完成。