我有一个由实时(外部)数据源填充的表模型,每隔xx秒更新一次。数据显示在JTable
中。
用户可以通过扩展AbstractCellEditor
的celleditor覆盖表格单元格中的数据。如果用户单击,代码将检查新值是否等于表模型中的值。如果没有,则假定它是一个覆盖。
问题是,比如你点击某个字段,不要更改该值,外部数据源同时更新表模型,代码认为用户使用旧值设置覆盖而不是仅取消覆盖。
执行此操作的标准逻辑和实现是什么?
答案 0 :(得分:0)
您的表模型应该保持一个状态,指示是否逐个单元地覆盖表格单元格。如果你不这样做,你也会遇到用户覆盖单元格并且实时数据进入的问题,并且更改为使用的相同值。然后你将取消该覆盖。
您可以在setValueAt(Object,int,int)
的覆盖TableModel
方法中填充此状态。 JTable
完成编辑后,AbstractCellEditor
会调用此方法。
答案 1 :(得分:0)
如何检测用户是否拥有 改变与否?
我创建了一个我称之为TableCellListener的类,用于监听通过单元格编辑器进行的更改。它在单元格开始编辑之前获取值的副本,并在停止编辑后将其与单元格的值进行比较。听起来它可能是你想要的。
另一种解决方案可能是在后台更新TableModel之前检查表是否正在编辑单元格。也许您弹出一个对话框,让用户有机会接受更新或取消更新。