Java Swing:我可以设置一个不';你不需要按alt键吗?

Java Swing:我可以设置一个不';你不需要按alt键吗?,java,user-interface,swing,mnemonics,Java,User Interface,Swing,Mnemonics,例如,假设我在应用程序主窗口的顶部有一系列工具栏样式的按钮。我想在其中一个键盘上加上一个助记符,它只是一个按键,比如F3 当您将助记符设置为KeyEvent.VK_F3时,用户必须按Alt+F3 如果您有一个菜单项,您可以设置加速器,而不是助记符,并选择是否使用元键。但是,按钮不允许设置加速器 有没有办法打开按钮助记符的元键?可以将一段代码绑定到菜单项、击键、按钮和您感兴趣的任何其他内容 一般来说,不要认为您的代码绑定到特定的按键/事件,也不要使用匿名内部类。取而代之的是使用真正的类,在这些类中

例如,假设我在应用程序主窗口的顶部有一系列工具栏样式的按钮。我想在其中一个键盘上加上一个助记符,它只是一个按键,比如F3

当您将助记符设置为
KeyEvent.VK_F3
时,用户必须按Alt+F3

如果您有一个菜单项,您可以设置加速器,而不是助记符,并选择是否使用元键。但是,按钮不允许设置加速器

有没有办法打开按钮助记符的元键?

可以将一段代码绑定到菜单项、击键、按钮和您感兴趣的任何其他内容


一般来说,不要认为您的代码绑定到特定的按键/事件,也不要使用匿名内部类。取而代之的是使用真正的类,在这些类中,您的代码可以为不同类型的事情重用。Action类所使用的模式提供了一些很好的例子。

在幕后,无论您是在组件上使用加速器还是助记符,该方法都会为您创建一个


因此,没有什么可以阻止您将击键和操作绑定到所需的任何组件,并手动创建键绑定。它甚至可以是一个没有setMNemonic(…)方法的组件

如果按钮是使用操作配置的,您确定不能在按钮上定义加速器吗?(我知道这在某一点上是正确的,但我认为在以后的Java版本中可能会有所不同。)

在任何情况下,以下是另一种在按钮上设置的方法:

button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(myKeyStroke, "actionName");
button.getActionMap().put("actionName", myAction);
其中myKeyStroke是一个按键,如F3,“actionName”是一个标签(字符串),myAction是它调用的操作