我有一个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;这对于验证且不能接受无效条目的编辑器很有用。"
这里有一个更好的解决方案:使用数据模型。您的模型包含这些值。
当表呈现时,从你的模型中获取值。
当用户编辑单元格时,取当前值。编辑成功后,将新值放入模型中。如果编辑失败,只需刷新单元格:渲染器将从模型中获取未修改的值,然后完成。