如何在JComboBox中输入时触发Java Swing InputVerifier(actionPerformed)?
我有一个Swing如何在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模型应该“免费”提
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等)