2010-06-29 72 views
1

我有一个摇摆JComboBoxInputVerifier正确设置。如何触发Java Swing InputVerifier输入JComboBox(actionPerformed)?

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

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

如果我输入“cat”并回车,我的InputVerifier永远不会从actionPerformed被调用。我是否需要明确致电actionPerformed我的InputVerifier

什么是最好的模式来验证我的JComboBox在标签上并输入?这似乎是这样的东西,应该给我“免费”的摆动模型。

回答

4

问题是“命中Tab”和“命中Enter”是指Java Swing中两个不同的东西。但是这两个行为对你,我和用户来说都是一样的。

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

在语义上,从用户的角度来看,这两个操作意味着相同的事情:“我完成了,这是我的输入。”但是,据我所知,Swing未能提供检测用户意图的方法。由于缺乏这样的特性,我感到很惊讶,因为这似乎是GUI中一种形式的最基本的功能。我们需要但没有的是“数据输入”事件。

有一个解决办法...

在类似的上下文(JTextField的代替的JComboBox)太阳/ Oracle的Java Tutorial提供其中一个类被创建的示例InputVerificationDemo

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

1

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

1

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

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

相关问题