1

我有一个JComboBox正确InputVerifier设置的 Swing。

我正在使用组合框来设置一个整数。

如果我在字段中键入“cat”并点击选项卡,我的InputVerifier触发器并将值重置为“0”。

如果我键入“cat”并按回车键,InputVerifier则永远不会从actionPerformed. 我需要明确调用我InputVerifier的 fromactionPerformed吗?

验证我JComboBox的标签并输入的最佳模型是什么?看起来这是摇摆模型应该“免费”给我的东西。

4

3 回答 3

4

问题是“hit Tab”和“hit Enter”在Java Swing中意味着两个不同的东西。但是这两个动作对你、我和用户来说意味着同样的事情。

Swing 没有单一的机制来检测“用户何时完成输入数据”。相反,Swing 专注于“此字段是否失去键盘焦点”和“用户是否在字段内按 Enter 键”的机制。

从用户的角度来看,这两个动作在语义上意味着同一件事:“我完成了。这是我的输入。”。但是,据我所知,Swing 未能提供检测用户意图的方法。我和您一样对缺少这样的功能感到惊讶,因为这似乎是 GUI 中表单的最基本功能。我们需要但没有的是“dataEntered”事件。

有一个解决方法……</p>

在类似的上下文中(JTextField 而不是 JComboBox),Sun/Oracle Java 教程提供了示例InputVerificationDemo,其中创建了一个类:

这种解决方法的好处是您可以在一个地方找到所有处理代码。缺点是您仍然有以下麻烦:

于 2011-08-22T22:46:36.970 回答
1

这是预期的行为InputVerifierTAB键尝试改变焦点,而ENTER键没有。您可以将ENTER键绑定到不同的操作,如教程如何使用键绑定中所述。此外,请考虑内容丰富的文章Key Bindings,其中包括一个方便的实用程序应用程序。

于 2010-06-29T18:15:03.527 回答
1

使用可编辑组合框时,焦点位于用作组合框编辑器的 JTextField 上。您可以将 ActionListener 添加到此文本字段。

在 ActionListener 中,您可以尝试调用 transferFocus() 方法,该方法应该等同于在文本字段中按标签。如果这不起作用,那么 actionListener 应该调用与 InputVerifier 相同的编辑代码。

于 2010-06-29T19:55:29.420 回答