如何在JComboBox中输入时触发Java Swing InputVerifier(actionPerformed)?

如何在JComboBox中输入时触发Java Swing InputVerifier(actionPerformed)?,java,swing,jcombobox,inputverifier,Java,Swing,Jcombobox,Inputverifier,我有一个SwingJComboBox,它的InputVerifier设置正确 我正在使用组合框设置一个整数 如果我在字段中键入“cat”并点击tab,我的InputVerifier将触发并将值重置为“0” 如果我键入“cat”并按enter键,则我的InputVerifier永远不会从actionPerformed调用。我是否需要从actionPerformed显式调用我的InputVerifier 在选项卡上验证我的JComboBox并输入的最佳模型是什么?这似乎是swing模型应该“免费”提

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

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

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

如果我键入“cat”并按enter键,则我的
InputVerifier
永远不会从
actionPerformed
调用。我是否需要从
actionPerformed
显式调用我的
InputVerifier


在选项卡上验证我的
JComboBox
并输入的最佳模型是什么?这似乎是swing模型应该“免费”提供给我的东西。

这是的预期行为:
选项卡
键尝试改变焦点,而
回车
键不改变焦点。您可以将
ENTER
键绑定到不同的操作,如本教程所述。此外,考虑信息性文章,其中包括一个方便实用的应用程序。p> 这是的预期行为:
选项卡
键尝试改变焦点,而
回车键不改变焦点。您可以将
ENTER
键绑定到不同的操作,如本教程所述。此外,考虑信息性文章,其中包括一个方便实用的应用程序。p> 使用可编辑组合框时,焦点放在用作组合框编辑器的JTextField上。您可以将ActionListener添加到此文本字段


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

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

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

问题是“点击Tab”和“点击Enter”在JavaSwing中的含义不同。但这两个动作对你、我和用户来说都是一样的

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

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

有一个解决办法

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

  • 扩展(处理焦点即将丢失的选项卡/单击)
  • 机具(在不离开字段的情况下处理按Enter键)
这种变通方法的好处是,您可以在一个地方找到所有处理代码。缺点是,您仍然有以下麻烦:

  • 创建一个单独的类
  • 实例化那个类
  • 将该实例传递给小部件的和方法(JTextField等)
问题在于,在JavaSwing中,“点击Tab”和“点击Enter”意味着两种不同的含义。但这两个动作对你、我和用户来说都是一样的

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

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

有一个解决办法

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

  • 扩展(处理焦点即将丢失的选项卡/单击)
  • 机具(在不离开字段的情况下处理按Enter键)
这种变通方法的好处是,您可以在一个地方找到所有处理代码。缺点是,您仍然有以下麻烦:

  • 创建一个单独的类
  • 实例化那个类
  • 将该实例传递给小部件的和方法(JTextField等)