有没有办法在OS X上使用Nimbus LAF(外观和感觉),同时仍然可以使用该Meta键进行剪切/复制/粘贴和全选操作?
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。
Ctrl
使用此getMenuShortcutKeyMask()方法可以NimbusLookAndFeel启用⌘密钥,如本示例所示。另请参阅此相关答案。
getMenuShortcutKeyMask()
NimbusLookAndFeel
⌘
在特定的情况下JTextField,您可以在引起原始动作的按键绑定中使用掩码。
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");