我有一个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键而不离开字段)


这种解决方法的好处是,您可以将处理代码全部放在一个地方。缺点是您仍然有以下麻烦:


创建一个单独的类。
实例化该类。
将该实例传递给窗口小部件的setInputVerifieraddActionListener方法(JTextField等)。

关于java - 如何在JComboBox中的enter上触发Java Swing InputVerifier(actionPerformed)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3143251/

10-11 00:17