JTable编辑器使用实时数据进行更改

时间:2009-07-14 19:52:40

标签: java swing

我有一个由实时(外部)数据源填充的表模型,每隔xx秒更新一次。数据显示在JTable中。

用户可以通过扩展AbstractCellEditor的celleditor覆盖表格单元格中的数据。如果用户单击,代码将检查新值是否等于表模型中的值。如果没有,则假定它是一个覆盖。

问题是,比如你点击某个字段,不要更改该值,外部数据源同时更新表模型,代码认为用户使用旧值设置覆盖而不是仅取消覆盖。

执行此操作的标准逻辑和实现是什么?

2 个答案:

答案 0 :(得分:0)

您的表模型应该保持一个状态,指示是否逐个单元地覆盖表格单元格。如果你不这样做,你也会遇到用户覆盖单元格并且实时数据进入的问题,并且更改为使用的相同值。然后你将取消该覆盖。

您可以在setValueAt(Object,int,int)的覆盖TableModel方法中填充此状态。 JTable完成编辑后,AbstractCellEditor会调用此方法。

答案 1 :(得分:0)

  

如何检测用户是否拥有   改变与否?

我创建了一个我称之为TableCellListener的类,用于监听通过单元格编辑器进行的更改。它在单元格开始编辑之前获取值的副本,并在停止编辑后将其与单元格的值进行比较。听起来它可能是你想要的。

另一种解决方案可能是在后台更新TableModel之前检查表是否正在编辑单元格。也许您弹出一个对话框,让用户有机会接受更新或取消更新。