java - 不使用alt键的jButton快捷键

标签 java swing

在 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/

相关文章:

java - 如何显示从 JTable 连接到 MS Access 数据库到文本字段的单击行

java - 单击电子邮件中的链接时如何生成不记名 token

java - 如何在亚马逊 EC2 中启用 mod_proxy?

java - 我可以使用 Firestore 检索不同集合中具有相同名称的相同子集合的文档吗?

java - JButton悬停效果动画。通过鼠标监听器更改不透明度

java - 如何禁用 JTree 上的默认键行为?

java - 在同一 JTable 单元格中渲染多个对象

java - 多重继承和多重接口(interface)。真正的区别是什么?

java - weblogic 服务器中的异常 - 非法尝试调用 EJBContext.setRollbackOnly()

java - 将组件直接添加到 JFrame 中,还是将它们放在 JPanel 中?