Java Swing L&;F本机键盘快捷键

Java Swing L&;F本机键盘快捷键,java,swing,keyboard-shortcuts,look-and-feel,Java,Swing,Keyboard Shortcuts,Look And Feel,如何在Java Swing应用程序中利用标准操作系统键盘快捷键?我知道如何将javax.swing.JToolbar或菜单栏添加到我的应用程序中,但它似乎没有绑定到事实上的标准键盘快捷键(如Ctrl+S保存)。您应该手动将键盘快捷键绑定到所需的菜单项。例如,对JMenuItem使用setAccelerator()方法 您可以使用每个平台获得正确的修改器键(Ctrl、Command等),但我不知道有什么方法可以找到操作的“标准”快捷键,而不需要自己定义它们 不过,像SWT这样更擅长于成为本地人的东

如何在Java Swing应用程序中利用标准操作系统键盘快捷键?我知道如何将
javax.swing.JToolbar
或菜单栏添加到我的应用程序中,但它似乎没有绑定到事实上的标准键盘快捷键(如Ctrl+S保存)。

您应该手动将键盘快捷键绑定到所需的菜单项。例如,对JMenuItem使用setAccelerator()方法

您可以使用每个平台获得正确的修改器键(Ctrl、Command等),但我不知道有什么方法可以找到操作的“标准”快捷键,而不需要自己定义它们


不过,像SWT这样更擅长于成为本地人的东西可能在这方面做得更好。

阅读上的Swing教程


Action基本上是一个ActionListener,它还有一些属性。您可以为操作定义文本、助记符和加速器。然后,您可以使用相同的操作创建一个JButton,您可以将其添加到工具栏中,或者您可以将其添加到菜单中。

基于其他人的答案,我想我应该分享我在自己的应用程序中所做的事

首先,我有一个类变量,它的声明和初始化如下:

private static int keyMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
接下来,在同一个类中,我有一个方法:

private static void addNewMenuItem(JMenu rootMenu, String itemName,
        int itemMnemonic, ActionListener itemActionListener) {
    JMenuItem menuItem = new JMenuItem(itemName, itemMnemonic);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(itemMnemonic, keyMask)); // <-- Where I use keyMask.
    menuItem.addActionListener(itemActionListener);
    rootMenu.add(menuItem);
}

正如您可能想象的那样,这是一个非常方便的清理代码的方法,我正在设置一个包含几十个项目的菜单!我希望这能帮助别人。(我没有选择动作路线,因为它要求我为每个动作设置一个新类……这似乎是一个令人恼火的限制,必须绕开。我非常确定此代码比该代码短。)

谢谢。这是很有用的信息,虽然我更多的是在寻找“标准”键盘快捷键,而不是如何使用它们。(遗憾的是,我不能接受多个答案,因为这个答案也很有用,但至少我可以选择多个答案。)
addNewMenuItem(fileMenu, "Save...", KeyEvent.VK_S, saveListener);