java - 防止 Java Swing JTable 在输入无效数据时失去焦点

标签 java swing focus jtable tablecelleditor

我们目前在 java swing 中有一个 JTable/JTextEditor 的焦点问题。 JTable 有一个自定义单元格编辑器,它是一个 JTextField

问题是当一个单元格正在被编辑并且包含无效数据时,用户点击一个 JButton,文本字段将停止编辑并且 JButton actionPerformed (单击)被调用。 JTable#setValueAt 处理验证,因此如果 JTextField 中的数据无效,则底层 TableModel 不会更新。

理想情况下,我们不想让 JButton 点击发生。焦点应保留在 JTableJTextField 上。

单击该按钮将执行提交操作并关闭表格所在的框架。由于 TableModel#setValueAt 中的验证不会更新值,它会提交旧值。

这能做到吗?我对 Swing 还是很陌生,所以我不知道要检查什么。

不幸的是,我们的代码并不直接。 UI 是从 XML 构建的,按钮对表单上的任何其他内容一无所知(这是我继承的代码)。

在 .net 中,您可以通过处理验证事件并设置取消标志来阻止控件失去焦点。 Java有没有类似的机制。

最佳答案

在编辑结束后验证输入,在 setValueAt() 中,可能会迟到,带来不便。编辑器本身可以排除无效值的导航,如本 example 所示。链接到相应的 tutorial section .

对于有效值,您可以在失去焦点时提交表:

table.putClientProperty("terminateEditOnFocusLost", true);

关于java - 防止 Java Swing JTable 在输入无效数据时失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10718784/

相关文章:

java - 对象引用有多大?

java - 不可修改的 map 是否需要同步?

java - 运行 jar 文件时 JList 控件大小发生变化

java - 带有 WindowListener 的 JDialog - 未触发 windowClosing

Android- 专注于拨出和拨入电话的电话应用程序

java - 更改双变量中的随机值?

java - Hibernate Criteria 查询多个类(或受子类列表限制)

java - ExecutorService 和 SwingWorker

flutter - 如何抑制 Flutter 中的滚动到 View 行为?

javascript - mousedown后触发输入