2011-09-29 40 views
1

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

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

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

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

任何帮助将不胜感激。


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

感谢您的回复。

+2

不知道为什么不,在没有在http://sscce.org/表单中看到您的代码时发生了什么错误/确实发生了什么 – mKorbel

回答

-1

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

感谢您的回复。

+0

不这么认为(猜测涉及到,因为您没有显示任何代码:-) - 相反,它会绕过编辑器的错误行为:编辑器_must_通知其监听器它已完成编辑。其中一个列表将是发送数据刷新的代码。该代码必须延迟(通过包装在invokeLater中),直到表内部清理完毕 – kleopatra

1

我已经设置了putClientProperty(“terminateEditOnFocusLost”,Boolean.TRUE),但将焦点改变到另一个组件并没有帮助。

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

+0

对不起应该提到它在创建表时设置。 – Ryan

+0

@瑞恩见mKorbel的评论。 – camickr