2009-07-14 28 views
0

我有一个表格模型,它由每隔xx秒更新一次的活动(外部)数据源填充。数据显示在JTable中。使用实时数据更改JTable编辑器

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

问题是,比如你点击一个字段,不改变值,并且外部数据源在此期间更新表模型,代码认为用户使用旧值设置覆盖而不是仅仅取消覆盖。

这样做的标准逻辑和实现是什么?

回答

0

如何检测用户是否有 进行了更改?

我做了一个类,我调用TableCellListener,它侦听通过单元格编辑器所做的更改。它会在单元格开始编辑之前获取该值的一个副本,并在停止编辑之后将其与单元格的值进行比较。听起来这可能是你想要的。

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

0

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

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