Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable编辑器随实时数据更改_Java_Swing - Fatal编程技术网

Java JTable编辑器随实时数据更改

Java JTable编辑器随实时数据更改,java,swing,Java,Swing,我有一个由实时外部数据源填充的表模型,该数据源每xx秒更新一次。数据显示在JTable中 用户可以通过扩展AbstractCellEditor的celleditor覆盖表格单元格中的数据。如果用户不点击,代码将检查新值是否等于表模型中的值。如果没有,则假定它是一个覆盖 问题是,假设您单击一个字段,不更改该值,并且外部数据源更新表模型。与此同时,代码认为用户使用旧值设置了覆盖,而不仅仅是取消覆盖 执行此操作的标准逻辑和实现是什么?您的表模型应保持一种状态,指示是否逐个单元格重写了表单元格。如果不这

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

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

问题是,假设您单击一个字段,不更改该值,并且外部数据源更新表模型。与此同时,代码认为用户使用旧值设置了覆盖,而不仅仅是取消覆盖


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

您的表模型应保持一种状态,指示是否逐个单元格重写了表单元格。如果不这样做,您还将遇到一个问题,即用户已重写单元格,实时数据将进入并更改为用户输入的相同值。然后,您将取消该覆盖

您可以在TableModel中重写的setValueAtObject、int、int方法中填充此状态。当AbstractCellEditor完成编辑时,JTable将调用此方法

如何检测用户是否有 是否做了改变

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

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