【问题标题】:How to trigger Java Swing InputVerifier on enter in JComboBox (actionPerformed)?java - 如何在JComboBox(actionPerformed)中输入时触发Java Swing InputVerifier?
【发布时间】:2011-03-09 18:23:08
【问题描述】:

我有一个正确设置了InputVerifier 的 Swing JComboBox

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

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

如果我输入“cat”并回车,我的InputVerifier 永远不会从actionPerformed 调用。我是否需要从actionPerformed 显式调用我的InputVerifier

在标签上验证我的JComboBox 并输入的最佳模型是什么?看来这是摇摆模型应该“免费”给我的东西。

【问题讨论】:

    标签: java swing jcombobox inputverifier


    【解决方案1】:

    问题是“hit Tab”和“hit Enter”在 Java Swing 中意味着两个不同的东西。但这两个操作对你、我和用户来说意义相同。

    Swing 没有单一机制来检测“用户何时完成输入数据”。相反,Swing 专注于“此字段是否失去键盘焦点”和“用户是否在字段内按 Enter 键”的机制。

    从用户的角度来看,这两个操作的语义含义相同:“我完成了。这是我的输入。”。但是,据我所知,Swing 未能提供检测用户意图的方法。我和您一样对缺少这样的功能感到惊讶,因为这似乎是 GUI 中表单的最基本功能。我们需要但没有的是“dataEntered”事件。

    有一个解决方法……

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

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

    【讨论】:

      【解决方案2】:

      这是InputVerifier 的预期行为:TAB 键尝试更改焦点,而ENTER 键不尝试。您可以将ENTER 键绑定到不同的操作,如教程How to Use Key Bindings 中所述。另外,请考虑一下内容丰富的文章Key Bindings,其中包括一个方便的实用程序应用程序。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-19
          • 2014-05-13
          • 2012-01-29
          • 2017-11-10
          • 1970-01-01
          • 1970-01-01
          • 2020-03-23
          相关资源
          最近更新 更多