Swing - 可以输入用于焦点遍历和执行的操作吗?

时间:2016-11-23 16:12:29

标签: java swing focus joptionpane

我知道这是一个荒谬(并且有些令人尴尬)的情景,我开始相信其实不可能克服......

我为我的客户开发了一个基本的swing应用程序,它包含一个包含文本字段和组合框的框架,用于验证/处理丢失焦点时捕获的数据 - 标准问题。

我的客户可以使用ENTER密钥而不是默认的TAB密钥从一个字段遍历到另一个字段,从而生活在“DOS时代”。

我通过实施KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(...)简单而整洁地实现了这一目标。 (见下面的完整代码)

在捕获数据的某些时刻,我需要显示错误或警告消息,并通过明显的JOptionPane.showMessageDialog(parentComponent, message, "Warning", JOptionPane.WARNING_MESSAGE)例程实现此目的。

问题 - 当面对对话框消息框时,我的客户希望他可以按ENTER关闭它,这不再有效,因为我显然已经覆盖了{{1 actionPerformed的事件,而是将其指定为焦点遍历键。

我知道ENTER完全正常工作,而是在Ok按钮上触发SPACE事件,然后快速关闭对话框。问题是我的客户希望能够按actionPerformed ...

我试图避免创建一个自定义对话框消息框,但即使我尝试了这个,我也不认为我能够达到我想要的结果,因为我的下一个要点......

我尝试过使用ENTERJOptionPane.showOptionDialog(parentComponent, message, "Error", JOptionPane.OK_OPTION, JOptionPane.ERROR_MESSAGE, null, buttons, null)是预先创建的按钮数组,我可以添加动作/键/焦点侦听器,以尝试重新创建{{{1}的默认行为1}}键。问题是buttons在任何这些事件侦听器中都不再注册,只要我将其指定为焦点遍历键。

这就是我将ENTER(以及ENTERENTERESC)设置为焦点遍历键的方式:

TAB

知道这是否可行,或者我应该告诉我的客户处理它并习惯按SHIFT+TAB

提前致谢,

Xandel

0 个答案:

没有答案