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 自定义单元格渲染器焦点问题的主要内容,如果未能解决你的问题,请参考以下文章