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

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

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

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

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

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

【问题讨论】:

    标签: java swing user-interface jtable tablecellrenderer


    【解决方案1】:

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

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

    然后你就可以保存值了

    【讨论】:

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

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

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

    【讨论】: