如何在JComboBox中输入Java Swing InputVerifier(actionPerformed)?

时间:2010-06-29 17:36:20

标签: java swing jcombobox inputverifier

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

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

如果我在字段中输入“cat”并点击标签,我的InputVerifier会触发并将值重置为“0”。

如果我输入“cat”并按Enter键,则InputVerifier永远不会从actionPerformed调用InputVerifier。我是否需要从actionPerformed明确呼叫我的JComboBox

在标签上验证我的{{1}}并输入的最佳模式是什么?似乎这是应该通过摇摆模型“免费”给我的东西。

3 个答案:

答案 0 :(得分:4)

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

Swing没有单一的机制来检测“当用户输入数据时”。相反,Swing专注于“这个领域失去键盘焦点”和“用户在场内按Enter键”的机制。

在语义上,从用户的角度来看,这两个动作意味着同样的事情:“我已经完成了。这是我的输入。”但是,据我所知,Swing无法提供检测用户意图的方法。由于缺乏这样的功能,我对你感到惊讶,因为这似乎是GUI中表单的最基本功能。我们需要但不具备的是“dataEntered”事件。

有一种解决方法......

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

此解决方法的好处是您可以在一个位置找到您的处理代码。缺点是你还有麻烦:

答案 1 :(得分:1)

这是InputVerifier的预期行为:TAB键尝试更改焦点,而ENTER键则不会。您可以将ENTER键绑定到其他操作,如教程How to Use Key Bindings中所述。另外,请考虑信息性文章Key Bindings,其中包含一个方便的实用程序。

答案 2 :(得分:1)

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

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