2011-09-01 97 views
3

我有一个像这样的表格。第二列使用JTextField渲染器,第三列使用基于JPasswordField的渲染器和编辑器。JTable定制单元格渲染器焦点问题

enter image description here

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

此前我只使用JTabbedPane下的JTextFields和JPasswordField,它运行良好。当我不得不添加越来越多的东西时,我将它改为这样的表格。

现在我已经把一个标签,让人们知道他们应该击中ENTER ..这不好。另一个大问题。至少在Nimbus外观和感觉,我们有一个想法,该领域仍然是焦点。在Windows系统看来,这个领域是否关注焦点并没有太大的可见差异。

enter image description here

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

回答

7

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

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

停止编辑,然后你可以保存该值

+0

第一列不可编辑。所以必须在stopEditing()之前检查null;非常感谢您提供简单的解决方案。 :) – Vigneshwaran

+0

不客气;) – Neifen

+0

可能,但有缺点:a)你必须在依赖发生提交的_every_位置执行它b)那些位置必须知道JTable,导致不需要的耦合 – kleopatra

5

自动告诉表在失去焦点时犯:

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

这是正确的+1 – mKorbel