我有一个正确设置了InputVerifier的Swing JComboBox。
我正在使用组合框设置一个整数。
如果我在字段中输入"cat“并按tab,我的InputVerifier将触发并重置值为"0”。
如果我输入"cat“并按回车键,actionPerformed永远不会调用我的InputVerifier。我需要从actionPerformed显式调用我的InputVerifier吗?
在tab和enter上验证我的JComboBox的最佳模式是什么?这似乎是swing模型应该“免费”提供给我的东西。
发布于 2011-08-23 06:46:37
问题是"hit Tab“和"hit Enter”在Java Swing中是两个不同的意思。但这两个动作对你、我和用户来说都意味着同样的事情。
Swing没有单一的机制来检测“用户何时完成数据输入”。相反,Swing关注的是“这个字段是否失去了键盘焦点”和“用户在字段内按回车键”的机制。
从语义上讲,从用户的角度来看,这两个动作的含义是相同的:“我完成了。这是我的输入。”但是,据我所知,Swing未能提供一种检测用户意图的方法。我和您一样对缺少这样的功能感到惊讶,因为这似乎是GUI中表单的最基本功能。我们需要但没有的是一个"dataEntered“事件。
有一个变通方法是…
在类似的上下文(JTextField而不是JComboBox)中,Sun/Oracle Java Tutorial提供了示例InputVerificationDemo,其中创建了一个类:
这个变通方法的好处是你可以在一个地方找到你的处理代码。缺点是你仍然会遇到这样的麻烦:
创建一个单独的class.
发布于 2010-06-30 02:15:04
这是InputVerifier的预期行为:TAB键尝试改变焦点,而ENTER键不改变焦点。您可以将ENTER密钥绑定到不同的操作,如教程中所述。另外,请考虑信息丰富的文章,其中包含一个方便的实用程序。
发布于 2010-06-30 03:55:29
使用可编辑的组合框时,焦点放在用作组合框编辑器的JTextField上。您可以将ActionListener添加到此文本域。
在ActionListener中,您可以尝试调用transferFocus()方法,它应该等同于按to键切换文本字段。如果这不起作用,那么actionListener应该调用与InputVerifier相同的编辑代码。
https://stackoverflow.com/questions/3143251
复制相似问题