防止Java Swing JTable在输入无效数据时失去焦点
我们目前在java swing中有一个关于JTable
/ JTextEditor
的焦点问题。 JTable
有一个定制的单元格编辑器,它是一个JTextField
。
问题是当一个单元格被编辑并且包含无效数据,并且用户点击JButton
,文本字段将停止编辑,并调用JButton
actionPerformed(点击)。 JTable#setValueAt
处理验证,因此如果JTextField
的数据无效,则不会更新基础TableModel
。
理想情况下,我们不想让JButton
发生点击。 焦点应该保留在JTable
或JTextField
。
单击该按钮将执行提交操作并关闭表格所在的框架。由于TableModel#setValueAt
中的验证不会更新该值,因此它会提交旧值。
这可以做到吗? 我对Swing还是比较陌生的,所以我不知道要检查什么。
不幸的是,我们的代码并不简单。 UI是用XML构造的,这样按钮就不会知道表单上的其他东西(这是我继承的代码)。
在.net中,您可以通过处理验证事件并设置取消标志来阻止控件失去焦点。 Java是否有类似的机制?
在编辑完成后验证输入,在setValueAt()
中可能不方便迟到。 编辑器本身可以排除无效值的导航,如本例中链接到相应的教程部分所示。
对于有效值,可以在失去焦点时使表提交:
table.putClientProperty("terminateEditOnFocusLost", true);
我通过覆盖JTable
的CellEditor
的stopCellEditing
方法来实现类似的功能。
@Override
public boolean stopCellEditing() {
String s = (String) getCellEditorValue();
if (s != null) {
if (!testYourValue()) {
Toolkit.getDefaultToolkit().beep();
return false;
}
}
return super.stopCellEditing();
}
你可以尝试在编辑器组件上使用inputverifier,即文本字段吗?
链接地址: http://www.djcxy.com/p/52439.html上一篇: Prevent Java Swing JTable losing focus when invalid data entered
下一篇: FocusEvent doesn't get the last value of JFormattedTextField, How I can get it?