【问题标题】:JTable: toggle an icon when I double-click a cellJTable:双击单元格时切换图标
【发布时间】:2011-08-01 18:47:44
【问题描述】:

我有一个表格列,我将覆盖 DefaultCellRenderer 以显示图标。

有没有一种方法可以检测 JTable 单元格上的双击,因此我可以切换相应行值的状态,以便它在两个值之间更改图标(代表“关闭”和“打开”)?

【问题讨论】:

    标签: swing jtable double-click


    【解决方案1】:

    有两种方法:

    1) 更简单的方法:给表格附加鼠标监听器,监听双击,通过rowAtPoint/columAtPoint找到行列,改变值,在表格模型中调用fireCellChanged()。

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

    你不需要两者都做。

    也检查一下,它的作用类似,但有一个按钮: http://tips4java.wordpress.com/2009/07/12/table-button-column/

    【讨论】:

    • 为什么#2 稍微好一点?我实际上最终更改为 JCheckbox(只需要为列使用自定义单元格渲染器,并使用适当的单元格编辑器方法,我使用的是 GlazedLists 的 AdvancedTableFormat;出于某种原因,自定义编辑器也搞砸了)
    • 一个可能但完全错误 - 逆风而行 ;-) 两个是唯一可以接受的(意思是:跟随 Swing'ish)。
    • @Jason:是的,kleopatra 说的。 1 会起作用,但这不是 Swing 做事的方式。
    【解决方案2】:

    当您执行一次单击时,呈现的单元格将被单元格编辑器替换,因此请提供与呈现的外观相同的单元格编辑器,添加鼠标侦听器并捕获双击并执行任何所需的操作。当你完成调用stopCellEditing()

    【讨论】:

    • 这完全是错误的:用户手势是否代表“开始编辑”是由 cellEditor 决定的(参见 cellEditor.isCellEditable(EventObject)。即使编辑,渲染器也不是“replaced”:不能,因为它从来都不是容器层次结构的一部分,而只是用来......好吧..在绘制单元格的那一刻控制(又名:渲染)单元格内容。
    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2010-11-19
    相关资源
    最近更新 更多