多くの JTextFields と JLabels と jbutton を含む JDialog があります。これらのコンポーネント (テキストフィールドまたはボタン) のいずれかがフォーカスされ、ESCAPE が入力されたときに、親 JDialog で生成された keyEvent をキャプチャしたいと考えています。
これには明確な解決策があることを知っています。ネットで見つけられません。
ありがとうございました!
多くの JTextFields と JLabels と jbutton を含む JDialog があります。これらのコンポーネント (テキストフィールドまたはボタン) のいずれかがフォーカスされ、ESCAPE が入力されたときに、親 JDialog で生成された keyEvent をキャプチャしたいと考えています。
これには明確な解決策があることを知っています。ネットで見つけられません。
ありがとうございました!
キー バインドについて詳しくは、こちらをご覧ください。次のコードを試してください。
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)
次の理由により、次の構成を使用します。 コンポーネントに、フォーカスのあるコンポーネントが含まれている (または含まれている)。この入力マップは、通常、複合コンポーネント (実装が子コンポーネントに依存するコンポーネント) に使用されます。(ドキュメントによると)