当任何孩子专注时,如何在父级上捕获关键事件



我有包含许多JTextFields、JLabels和jbutton的JDialog。当这些组件中的任何一个(文本字段或按钮)被聚焦并且键入 ESCAPE 时,我想在父 JDialog 中捕获生成的键事件。

我知道对此有明确的解决方案。我在网上找不到它。

谢谢!

阅读有关键绑定的更多信息。尝试下一个代码,它可以帮助您:

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

最新更新