我知道这是一个荒谬(并且有些令人尴尬)的情景,我开始相信其实不可能克服......
我为我的客户开发了一个基本的swing应用程序,它包含一个包含文本字段和组合框的框架,用于验证/处理丢失焦点时捕获的数据 - 标准问题。
我的客户可以使用ENTER
密钥而不是默认的TAB
密钥从一个字段遍历到另一个字段,从而生活在“DOS时代”。
我通过实施KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(...)
简单而整洁地实现了这一目标。 (见下面的完整代码)
在捕获数据的某些时刻,我需要显示错误或警告消息,并通过明显的JOptionPane.showMessageDialog(parentComponent, message, "Warning", JOptionPane.WARNING_MESSAGE)
例程实现此目的。
问题 - 当面对对话框消息框时,我的客户希望他可以按ENTER
关闭它,这不再有效,因为我显然已经覆盖了{{1 actionPerformed
的事件,而是将其指定为焦点遍历键。
我知道ENTER
完全正常工作,而是在Ok按钮上触发SPACE
事件,然后快速关闭对话框。问题是我的客户希望能够按actionPerformed
...
我试图避免创建一个自定义对话框消息框,但即使我尝试了这个,我也不认为我能够达到我想要的结果,因为我的下一个要点......
我尝试过使用ENTER
而JOptionPane.showOptionDialog(parentComponent, message, "Error", JOptionPane.OK_OPTION, JOptionPane.ERROR_MESSAGE, null, buttons, null)
是预先创建的按钮数组,我可以添加动作/键/焦点侦听器,以尝试重新创建{{{1}的默认行为1}}键。问题是buttons
在任何这些事件侦听器中都不再注册,只要我将其指定为焦点遍历键。
这就是我将ENTER
(以及ENTER
,ENTER
和ESC
)设置为焦点遍历键的方式:
TAB
知道这是否可行,或者我应该告诉我的客户处理它并习惯按SHIFT+TAB
?
提前致谢,
Xandel