Swing JTable:双击单元格时切换图标

Swing JTable:双击单元格时切换图标,swing,jtable,double-click,Swing,Jtable,Double Click,我有一个表列,我正在覆盖DefaultCellRenderer以显示一个图标 是否有一种方法可以检测JTable单元格上的双击,从而切换相应行值的状态,使其在表示关闭和打开的两个值之间更改图标?当执行一次单击时,渲染的单元格将被单元格编辑器替换,因此还应提供一个与渲染的单元格编辑器外观相同的单元格编辑器,添加鼠标侦听器,捕获双击并执行所需的任何操作。完成调用StopCell编辑后。有两种方法: 1更简单的方法:将鼠标侦听器连接到表,侦听双击,按rowAtPoint/columAtPoint查找行

我有一个表列,我正在覆盖DefaultCellRenderer以显示一个图标


是否有一种方法可以检测JTable单元格上的双击,从而切换相应行值的状态,使其在表示关闭和打开的两个值之间更改图标?

当执行一次单击时,渲染的单元格将被单元格编辑器替换,因此还应提供一个与渲染的单元格编辑器外观相同的单元格编辑器,添加鼠标侦听器,捕获双击并执行所需的任何操作。完成调用StopCell编辑后。

有两种方法:

1更简单的方法:将鼠标侦听器连接到表,侦听双击,按rowAtPoint/columAtPoint查找行和列,转换值,并在表模型中调用fireCellChanged

2更难但稍微好一点的方法:有一个自定义单元格编辑器,在编辑时更改值,并调用stopCellEditing

你不需要两者都做

也可以查看此功能,其功能类似,但有一个按钮:

为什么2稍微好一点?实际上,我最终改成了JCheckbox,只需要为列使用自定义单元格渲染器,以及适当的单元格编辑器方法,我使用的是GlazedList的AdvancedTableFormat;出于某种原因,让一个自定义编辑器也把它搞糟可能是有可能的,但显然是错误的——迎风而战;-两个是唯一可以接受的意思:走摇摆舞的路。@Jason:是的,克利奥帕特拉说的。1将起作用,但它不是Swing方式。这完全是错误的:用户手势是否表示开始编辑由cellEditor决定。请参阅cellEditor.isCellEditableEventObject。即使进行编辑,渲染器也不会被替换:因为它从来都不是容器层次结构的一部分,而只是用于。。好stame aka:在绘制单元格时渲染单元格内容。