0

多くの JTextFields と JLabels と jbutton を含む JDialog があります。これらのコンポーネント (テキストフィールドまたはボタン) のいずれかがフォーカスされ、ESCAPE が入力されたときに、親 JDialog で生成された keyEvent をキャプチャしたいと考えています。

これには明確な解決策があることを知っています。ネットで見つけられません。

ありがとうございました!

4

1 に答える 1

2

キー バインドについて詳しくは、こちらをご覧ください。次のコードを試してください。

public static void main(String[] args) {

    JFrame f = new JFrame();
    JTextField field =new JTextField();
    f.getContentPane().add(field,BorderLayout.SOUTH);

    ((JPanel)f.getContentPane()).getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F2"), "doSomething");
    ((JPanel)f.getContentPane()).getActionMap ().put("doSomething", new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            System.out.println("test");
        }
    });
    f.getContentPane().add(new JLabel("1"),BorderLayout.NORTH);


    f.pack();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
}

getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)次の理由により、次の構成を使用します。 コンポーネントに、フォーカスのあるコンポーネントが含まれている (または含まれている)。この入力マップは、通常、複合コンポーネント (実装が子コンポーネントに依存するコンポーネント) に使用されます。(ドキュメントによると)

于 2013-11-01T13:35:58.483 に答える