在SWT中,只需&在按钮标签中添加字母前面,即可为任何按钮提供快捷键.例如,如果我的按钮标签是&Play,我可以通过敲击p键盘上的字母来激活按钮.
在Swing中,您可以使用该mnemonic属性添加快捷键.但是,您需要点击alt+p以激活按钮.这非常适合菜单快捷方式.我想用字母按下并没有alt修饰符激活按钮.
我已经看过这篇关于如何做的帖子,但看起来很荒谬.有更简单的方法吗?
http://linuxjavaprogrammer.blogspot.com/2008/01/java-swing-jbutton-keyboard-shortcuts.html
更新:在@camickr建议之后,我最终使用了这段代码.我在网上找不到任何清晰简单的例子,所以希望这会帮助人们.
// play is a jButton but can be any component in the window
play.getInputMap(play.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_P, 0), "play");
play.getActionMap().put("play", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
playActionPerformed(e); // some function
}
});
Run Code Online (Sandbox Code Playgroud)
是的,Swing旨在使用Key Bindings.因此,不是向按钮添加ActionListener而是添加Action.然后可以通过按钮或菜单项共享该Action.您还可以使用KeyBindings分配任意数量的KeyStrokes来调用Action.本教程还有一个关于动作的部分,解释了为什么使用动作是有益的.
JComponent有一个registerKeyboardAction(...)方法,它基本上为你做了InputMap/ActionMap绑定,但是它也必须将ActionListener包装在一个包装器Action中,所以你最喜欢自己绑定它.