我有一个JComboBox
正确设置的Swing InputVerifier
。
我正在使用组合框设置一个整数。
如果我在该字段中键入“ cat”并单击选项卡,则我的InputVerifier
会触发并将该值重置为“ 0”。
如果我键入“ cat”并按Enter键,则永远不会从InputVerifier
调用我的actionPerformed
。我是否需要从InputVerifier
显式调用我的actionPerformed
?
验证我的JComboBox
选项卡并输入的最佳模型是什么?似乎这是秋千模型应该“免费”给予我的东西。
最佳答案
问题是“命中Tab”和“命中Enter”在Java Swing中意味着两个不同的东西。但是,这两个动作对您,我和用户都意味着同一件事。
Swing没有单一机制来检测“当用户完成数据输入时”。相反,Swing专注于“此字段是否失去键盘焦点”和“用户是否在字段内按下Enter键”的机制。
从用户的角度来看,这两个动作在语义上意味着相同的事情:“我完成了。这是我的输入。”但是,据我所知,Swing无法提供一种检测用户意图的方法。缺少这种功能令我感到惊讶,因为这似乎是GUI中表单的最基本功能。我们需要但没有的是一个“ dataEntered”事件。
有一种解决方法...
在类似的上下文中(用JTextField代替JComboBox),Sun / Oracle Java Tutorial提供了示例InputVerificationDemo,其中创建了一个类,该类如下:
扩展InputVerifier(以处理将要失去焦点的选项卡/单击)
实现ActionListener(处理Enter键而不离开字段)
这种解决方法的好处是,您可以将处理代码全部放在一个地方。缺点是您仍然有以下麻烦:
创建一个单独的类。
实例化该类。
将该实例传递给窗口小部件的setInputVerifier和addActionListener方法(JTextField等)。
关于java - 如何在JComboBox中的enter上触发Java Swing InputVerifier(actionPerformed)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3143251/