JTable 自定义单元格渲染器焦点问题

Posted

技术标签:

【中文标题】JTable 自定义单元格渲染器焦点问题【英文标题】:JTable custom cell renderer focus problem 【发布时间】:2011-11-08 04:04:48 【问题描述】:

我有一张这样的桌子。第二列使用 JTextField 渲染器,第三列使用基于 JPasswordField 的渲染器和编辑器。

看起来不错。但问题是我们必须输入值并且必须点击“ENTER”。在该图像中,我输入了密码,但没有按 Enter。所以如果我点击“保存并关闭”按钮,它会告诉我密码字段为空的错误。

以前我只使用了 JTabbedPane 下的 JTextFields 和 JPasswordFields,而且效果很好。当我不得不添加越来越多的东西时,我将其更改为这样的表格。

现在我已经贴了一个标签,让人们知道他们应该按 ENTER.. 这不好。另一个大问题。至少在 Nimbus 外观和感觉中,我们知道该领域仍然是焦点。在 Windows 系统外观中,该字段是否聚焦并没有太大的明显差异。

当我点击“保存并关闭”按钮时,我需要用户名字段或密码字段来设置它的值。请帮帮我。

【问题讨论】:

【参考方案1】:

所以您的问题是,您仍在编辑单元格。所以你必须停止编辑,然后单元格才会被改变。

在您的按钮上,您可以获得正在编辑的单元格TableCellEditor cellEditor = table.getCellEditor(); 然后你可以停止编辑if(cellEditor!=null) cellEditor.stopCellEditing(); 然后你就可以保存值了

【讨论】:

第一列不可编辑。所以必须在 stopEditing(); 之前检查 null非常感谢您提供简单的解决方案。 :) 可能,但有缺点:a)您必须在依赖于已发生提交的 每个 位置执行此操作 b)这些位置必须知道 JTable,从而导致不需要的耦合【参考方案2】:

告诉表格在失去焦点时自动提交:

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

【讨论】:

以上是关于JTable 自定义单元格渲染器焦点问题的主要内容,如果未能解决你的问题,请参考以下文章

通过自定义单元格渲染器在Jtable中显示超链接

JTable 单元格渲染器

JTable 的单元格渲染器 - 彩色行

如何将JComboBox添加到JTable单元格?

为啥我的 Java 自定义单元格渲染器在选择行/单元格时不显示突出显示?

jTable 单元格背景颜色