3

私はJavaスイングアプリケーションを開発しています。CTRL   +と言うキーボードショートカットを追加したいH。これは、クリックされたときに jButton1 によって実行されるのと同じアクションを実行する必要があります。

このショートカットは、jButton1 がフォーカスされていない場合でも同じように動作するはずです。

KeyEventDispatcher を試してみましたが、うまくいかないようです。他に方法はありますか?

4

4 に答える 4

2

わかりました-まず、Java Swingでアプリケーション全体のショートカットを設定する方法はないと思います(この質問を参照してください)。ただし、コンポーネントの場合は可能です。

の作成を使用する必要がありActionますKeyStroke。しかし、Windowsの場合、このライブラリは非常に役立ちます

    {
        KeyStroke cancelKeyStroke = KeyStroke
                .getKeyStroke((char) KeyEvent.VK_ESCAPE);
        Keymap map = JTextComponent.getKeymap(JTextComponent.DEFAULT_KEYMAP);
        map.addActionForKeyStroke(cancelKeyStroke, cancelKeyAction);
    }
    private static Action cancelKeyAction = new AbstractAction() {
        public void actionPerformed(ActionEvent ae) {
            Component comp = (Component) ae.getSource();
            Window window = SwingUtilities.windowForComponent(comp);
            if (window instanceof Dialog) {
                window.dispose();
            } else if (comp instanceof JTextComponent
                    && !(comp instanceof JFormattedTextField)) {
                JTextComponent tc = (JTextComponent) comp;
                int end = tc.getSelectionEnd();
                if (tc.getSelectionStart() != end) {
                    tc.setCaretPosition(end);
                }
            }
        }
    };
于 2012-07-18T02:25:13.757 に答える
1

Controlキーを修飾子として明示的に使用する代わりに、クロスプラットフォームのユーザーエクスペリエンスを向上させるために、 MASKreturnedbyを使用してください。例ですgetMenuShortcutKeyMask()ImageApp

于 2012-07-18T01:58:48.197 に答える
1

クラスとを使用して、キーバインディングを調べる必要があります。Oracle から(わずかに変更されていますが、例としてDefaultEditorKitを使用しています):KeyStrokeInputMapTextComponentDemo

// CTRL + H
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.CTRL_MASK);
// bind the keystroke to an object
inputMap.put(key, DefaultEditorKit.backwardAction);

コンポーネントにフォーカスがない場合でもイベントを発生させたい場合は、キー リスナーよりもこれらを使用します。

コンポーネントにフォーカスがないときにキーバインディングがアクティブになる場合、キーリスナーも困難です。

于 2012-07-17T19:17:54.673 に答える