我正在開發自己的文本式JComponent。它不是JTextComponent的子類,因爲它不使用Document作爲模型。我仍然想支持剪切/複製/粘貼的標準助記符,但我知道擊鍵依賴於平臺。最終,我將讓用戶自己編輯鍵綁定,但現在,我想至少默認一些明智的東西。平臺特定的剪切粘貼助記符擺動。
是否有可能以某種方式從LookAndFeel獲取它?或者我需要自己檢測平臺,並且只需要爲每個平臺進行映射?
我正在使用Java 8,如果這有所作爲。
我正在開發自己的文本式JComponent。它不是JTextComponent的子類,因爲它不使用Document作爲模型。我仍然想支持剪切/複製/粘貼的標準助記符,但我知道擊鍵依賴於平臺。最終,我將讓用戶自己編輯鍵綁定,但現在,我想至少默認一些明智的東西。平臺特定的剪切粘貼助記符擺動。
是否有可能以某種方式從LookAndFeel獲取它?或者我需要自己檢測平臺,並且只需要爲每個平臺進行映射?
我正在使用Java 8,如果這有所作爲。
我沒有爲此目的知道的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組件看到。我剛剛展示了我認爲您感興趣的綁定。
因此,我發現最接近我做我想要的是來自Apple的OS X Integration for Java頁面。工具包類getMenuShortcutKeyMask()
上有一個方法,它可以幫助支持我想要的。
例如,以下代碼將在mac上獲得「meta-v」的正確擊鍵,並在windows/linux上獲得「ctrl-v」。
KeyStroke.getKeyStroke(KeyEvent.VK_V,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())