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

时间:2011-11-22 12:26:08

标签: java swing jtable

我有一个JTable可以在一定范围内输入一些数字。当它们超出该范围时,会出现异常以显示错误。此外,当您输入其他字符或甚至您什么都不输入时。

当这些事情发生时,我希望得到旧的价值。我曾想过让一个监听器在一个单元格获得焦点时向我发出警告(我的意思是当单元格被打开以输入值时)。然后我会保存该值,如果出现问题,我可以再次输入值。

我已经搜索了一段时间,但我还没有看到做那个听众的方法。我怎么能这样做(或以不同的方式)?

3 个答案:

答案 0 :(得分:3)

表模型(您的AbstractTableModel的子类)应该进行验证。

更新JTable时,它会执行对

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

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

答案 1 :(得分:3)

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

请参阅stopCellEditing() 来自Javadoc:

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

答案 2 :(得分:2)

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

当表格呈现时,请从模型中获取值。

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