【问题标题】:Cell editor not exiting when row is deleted删除行时单元格编辑器不退出
【发布时间】:2011-09-29 14:51:44
【问题描述】:

我有一个包含几列的 JTable,其中之一是有一个自定义渲染器来显示 JPanel 中的 3 个按钮以及一个自定义编辑器以允许它们可点击。其中一个按钮向我们的服务器发送该行 ID 的删除命令,然后通过清除数据模型并再次加载数据从服务器重新加载表数据。发生这种情况时,带有 3 个按钮的单元格会继续显示(但不是该行的其余部分),直到我单击另一行中的另一个按钮,即使该行已消失。

我已设置 putClientProperty("terminateEditOnFocusLost", Boolean.TRUE),但将焦点更改为另一个组件并没有帮助。

我已经尝试在刷新数据之前删除行本身(甚至删除了所有行)并确保调用fireTableRowsDeleted()

我也试过调用TableCellEditorcancelCellEditing()stopCellEditing()函数,甚至手动将编辑行/列设置到另一个单元格。

任何帮助将不胜感激。


好的,所以我想通了。我最终在桌子上打电话给removeEditor() 并修复了它。

感谢您的回复。

【问题讨论】:

  • 不知道为什么不,出了什么问题/真的发生了没有在sscce.org 表单中看到您的代码

标签: java swing jtable tablecelleditor


【解决方案1】:

我已设置 putClientProperty("terminateEditOnFocusLost", Boolean.TRUE) 但将焦点更改为另一个组件并没有帮助。

应该在创建表时调用该方法,而不是在单击按钮时在 actionPerformed 方法中调用。

【讨论】:

  • 对不起应该提到它是在创建表格时设置的。
【解决方案2】:

好的,所以我想通了。我最终在数据刷新之前在表上调用了 removeEditor() 并修复了它。

感谢您的回复。

【讨论】:

  • 不这么认为(猜测涉及,因为您没有显示任何代码 :-) - 相反,它绕过了编辑器的不当行为:编辑器 必须 通知其听众认为它是通过编辑完成的。这些侦听器之一是发送数据刷新的代码。该代码必须延迟(通过包装在 invokeLater 中)直到表的内部清理之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
相关资源
最近更新 更多