我正在开发自己的类似文本的JComponent。它不是JTextComponent的子类,因为它不使用Document作为模型。我仍然希望支持剪切/复制/粘贴的标准助记符,但我知道击键取决于平台。
最终,我会让用户自己编辑键绑定,但是现在,我想至少默认一些合理的东西。
是否有可能以某种方式从LookAndFeel获取它?或者我是否需要自己检测平台并且每个平台只有一个映射?
如果有所作为,我正在使用Java 8.
答案 0 :(得分: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);
}
}
请注意,对于每个Action,Windows上实际上有3个绑定,您可以在Key Bindings程序中看到,这些程序显示每个Swing组件的所有键绑定。我刚刚展示了我认为你感兴趣的装订。
答案 1 :(得分:1)
所以,我发现最接近我想要的是来自Apple的OS X Integration for Java页面。 Toolkit类getMenuShortcutKeyMask()
上有一个方法,它将有助于支持我想要的东西。
例如,以下内容将在mac上获得“meta-v”的正确按键,在windows / linux上获得“ctrl-v”。
KeyStroke.getKeyStroke(KeyEvent.VK_V,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())