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