平台特定切割粘贴助记符摆动。

时间:2015-06-13 17:50:46

标签: java swing cross-platform

我正在开发自己的类似文本的JComponent。它不是JTextComponent的子类,因为它不使用Document作为模型。我仍然希望支持剪切/复制/粘贴的标准助记符,但我知道击键取决于平台。

最终,我会让用户自己编辑键绑定,但是现在,我想至少默认一些合理的东西。

是否有可能以某种方式从LookAndFeel获取它?或者我是否需要自己检测平台并且每个平台只有一个映射?

如果有所作为,我正在使用Java 8.

2 个答案:

答案 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())