2015-06-13 47 views
0

我正在開發自己的文本式JComponent。它不是JTextComponent的子類,因爲它不使用Document作爲模型。我仍然想支持剪切/複製/粘貼的標準助記符,但我知道擊鍵依賴於平臺。最終,我將讓用戶自己編輯鍵綁定,但現在,我想至少默認一些明智的東西。平臺特定的剪切粘貼助記符擺動。

是否有可能以某種方式從LookAndFeel獲取它?或者我需要自己檢測平臺,並且只需要爲每個平臺進行映射?

我正在使用Java 8,如果這有所作爲。

回答

1

我沒有爲此目的知道的LAF屬性。

但是,您可能能夠使用LAF的InputMap中的信息。 爲Windows 8的以下工作:

import java.awt.*; 
import javax.swing.*; 

public class PlatformMnemonics 
{ 
    public static void main(String[] args) 
    { 
     KeyStroke copyKeyStroke = null; 
     KeyStroke cutKeyStroke = null; 
     KeyStroke pasteKeyStroke = null; 

     InputMap im = (InputMap) UIManager.get("TextField.focusInputMap"); 

     for (KeyStroke keyStroke: im.keys()) 
     { 
      boolean upperCase = Character.isUpperCase(keyStroke.getKeyCode()); 

      if (upperCase) 
      { 
       String actionMapKey = im.get(keyStroke).toString(); 

       if ("copy-to-clipboard".equals(actionMapKey)) 
        copyKeyStroke = keyStroke; 
       else if ("cut-to-clipboard".equals(actionMapKey)) 
        cutKeyStroke = keyStroke; 
       else if ("paste-from-clipboard".equals(actionMapKey)) 
        pasteKeyStroke = keyStroke; 

      } 
     } 

     System.out.println("Copy KeyStroke: " + copyKeyStroke); 
     System.out.println("Cut KeyStroke: " + cutKeyStroke); 
     System.out.println("Paste KeyStroke: " + pasteKeyStroke); 
    } 
} 

注居然有在Windows 3個綁定的每個動作,你可以在Key Bindings程序顯示所有關鍵綁定每個Swing組件看到。我剛剛展示了我認爲您感興趣的綁定。

1

因此,我發現最接近我做我想要的是來自Apple的OS X Integration for Java頁面。工具包類getMenuShortcutKeyMask()上有一個方法,它可以幫助支持我想要的。

例如,以下代碼將在mac上獲得「meta-v」的正確擊鍵,並在windows/linux上獲得「ctrl-v」。

KeyStroke.getKeyStroke(KeyEvent.VK_V, 
    Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())