小编典典

Nimbus LAF的Mac键盘快捷键

java

有没有办法在OS X上使用Nimbus LAF(外观和感觉),同时仍然可以使用该Meta键进行剪切/复制/粘贴和全选操作?

目前,我的Swing应用程序的main方法中包含以下代码,该代码根据操作系统更改LAF(OS X的默认设置,所有其他操作系统的Nimbus设置):

if (!System.getProperty("os.name", "").startsWith("Mac OS X")) {
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(LicenseInspectorUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(LicenseInspectorUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(LicenseInspectorUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(LicenseInspectorUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
}

我这样做是一种变通方法,因为Nimbus会覆盖OS
X上用于剪切/复制/粘贴和全选的键盘快捷键(Meta键与Ctrl键)。如果不改写键盘快捷键,我宁愿一直使用Nimbus。


阅读 223

收藏
2020-11-01

共1个答案

小编典典

使用此getMenuShortcutKeyMask()方法可以NimbusLookAndFeel启用密钥,如本示例所示。另请参阅此相关答案

在特定的情况下JTextField,您可以在引起原始动作的按键绑定中使用掩码。

int MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
JTextField jtf = new JTextField("Test");
jtf.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, MASK), "select-all");
jtf.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_C, MASK), "copy");
jtf.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_X, MASK), "cut");
jtf.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_V, MASK), "paste");
2020-11-01