我有包含许多 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)
是因为:组件包含(或是)具有焦点的组件。此输入映射通常用于复合组件——其实现依赖于子组件的组件。(根据文档)