在 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
}
});
最佳答案
是的,Swing 被设计为使用 Key Bindings .因此,不是向按钮添加 ActionListener,而是添加一个 Action。然后可以通过按钮或菜单项共享该操作。您还可以使用 KeyBindings 分配任意数量的 KeyStrokes 来调用 Action。本教程还有一个关于 Actions 的部分,解释了为什么使用 Action 是有益的。
JComponent 有一个 registerKeyboardAction(...) 方法,它基本上为您执行 InputMap/ActionMap 绑定(bind),但它也必须将 ActionListener 包装在包装器 Action 中,因此您最好自己进行绑定(bind)。
关于java - 不使用alt键的jButton快捷键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240740/