7

エスケープキーが押されたことにJPanelが反応する必要があるアプリケーションに取り組んでいます。コンポーネントにキーバインドを登録するために正しい方法を使用したことは確かですが、明らかに私はまだ何か間違ったことをしています。これは、前述のキーバインドに反応するエンドの登録を担当するコードです。

private void initializeKeyBindings() { 
    Action a = new AbstractAction() {
        private static final long serialVersionUID = 1L;
        @Override public void actionPerformed(ActionEvent e) {
            menu.setVisible(true);
            System.out.println("Herp");
        }
    };
    this.getInputMap().put(KeyStroke.getKeyStroke("ESCAPE"), "ESCAPE");
    this.getActionMap().put("ESCAPE", a);
}

このメソッドは、他のすべてのコンポーネントが初期化された後、私のJPanelのコンストラクターで呼び出されます。デバッグしてみたところ、アクション自体はJPanelに登録されていますが、actionPerformed()メソッドのコードに到達していません。上にあるJFrameでCardLayoutを使用しているため、このJPanelにフォーカスがないことに問題があるのではないかと思います。それが私の進歩を非常にひどく妨げているので、誰かがこれで私を助けてくれることを心から願っています。

4

1 に答える 1

10

あなたはそこが恋しい

xxx.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(...)

于 2012-11-02T20:04:13.610 に答える