3

これまでのところ、次のコードを使用して、ウィンドウを閉じるための ESC キーを取得しました。

KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
    Action escapeAction = new AbstractAction() {
         public void actionPerformed(ActionEvent e) {
            screen.dispose();
         }
    };
screen.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, "ESCAPE");
screen.getRootPane().getActionMap().put("ESCAPE", escapeAction);

しかし、CTRL+A イベントを追加するにはどうすればよいのでしょうか? keypressed/released のブール値を設定する方法について読んだことを覚えていますが、このコードで機能しているとは思えないので、CTRL + A をどのように実装できるか疑問に思っています。

ありがとうございました

4

1 に答える 1

5

KeyEvent.VK_A をコントロール A にするためにそこをKeyStroke.getKeyStroke(...)使用する必要があるため、重要なのはメソッドの 2 番目のパラメーターです。InputEvent.CTRL_DOWN_MASK

例えば、

KeyStroke ctrlAKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_A,
     InputEvent.CTRL_DOWN_MASK);

キーダウンやキーリリースではなく、キープレスに関心があるため、ブール値を使用する 3 パラメーターメソッドの使用について心配する必要はありません。

あなたのコメントについて:

先程のコメント訂正。動作します。Ctrl+W としましょう。Ctrl+A は、フレーム内のテキストフィールドでネイティブの「すべて選択」機能を実行しようとします。それを回避する方法はありますか?

私が理解していることから、フォーカスのあるコンポーネント (JTextArea など) が ctrl-A キーの押下に直接応答する場合、これは問題になります。JComponent.WHEN_FOCUSED;これを回避するには、同じバインディングをこのコンポーネントに追加できますが、条件を使用するその InputMap に必ずバインドしてください。

于 2012-05-30T19:18:20.963 に答える