【发布时间】:2012-05-29 22:23:26
【问题描述】:
我们目前在 java swing 中遇到了 JTable/JTextEditor 的焦点问题。 JTable 有一个自定义单元格编辑器,它是 JTextField。
问题是当一个单元格被编辑并且包含无效数据时,用户点击JButton,文本字段将停止编辑并调用JButton actionPerformed(点击)。 JTable#setValueAt 处理验证,因此如果 JTextField 中的数据无效,则底层 TableModel 不会更新。
理想情况下,我们不想让JButton 点击发生。焦点应留在JTable 或JTextField。
单击按钮将执行提交操作并关闭表格所在的框架。由于TableModel#setValueAt 中的验证不会更新值,它会提交旧值。
这可以吗?我对 Swing 还很陌生,所以我不知道要检查什么。
不幸的是,我们的代码不是直截了当的。 UI 是从 XML 构造的,使得按钮对表单上的任何其他内容一无所知(这是我继承的代码)。
在 .net 中,您可以通过处理 Validating 事件并设置取消标志来阻止控件失去焦点。 Java有没有类似的机制。
【问题讨论】:
-
为了更好的帮助,请尽快使用SSCCE编辑您的问题
-
您能告诉我们按钮的用途吗?为什么用户会点击它,为什么它首先存在?你不能在他们打字时简单地禁用按钮吗?帮助我们了解具体的用例,我们可以更准确地帮助您。
-
干杯,伙计们。稍微编辑问题以帮助尝试绘制图片。我更习惯 .NET,由于我们系统的复杂性,我无法真正发布代码 sn-p。不过,我会尝试用表格和按钮编写一个简单的场景。
标签: java swing focus jtable tablecelleditor