是否有更动态的方法将侦听器添加到父级中的所有组件?

时间:2014-03-31 21:27:36

标签: java swing listener user-input jcomponent

现在,我覆盖JFrame.addKeyListener(KeyListener),检查其内容窗格中的组件,然后向所有这些组件添加侦听器(在使用super调用原始方法之后)

JFrame frame = new JFrame() {
    public void addKeyListener(KeyListener l) {
        super.addKeyListener(l);
        for(Component c : getContentPane().getComponents()) {
            c.addKeyListener(l);
        }
    }
};

我不确定这是否是将听众添加到组件层次结构的通常实践方式,但它是我能想到的唯一方法。标准JDK中是否已经内置了这个内容?

1 个答案:

答案 0 :(得分:1)

  

无需问为什么

当然有,因为任何时候我看到有人使用KeyListener,我知道几乎总有更好的方法来解决问题。

  

无论焦点是什么,我都希望触发KeyEvents

还不是很清楚。

例如,人们通常不会在JButton上监听KeyEvents。 ActionListener用于处理键盘按下按钮。或者,有些人已经建议Key Bindings可能更合适。

或者在文本组件上,您可以使用DocumentListener

最后,如果你真的认为你需要听所有事件,那么你可以使用`AWTEventListener'。有关详细信息,请参阅Global Event Listeners

是的,为什么,这很重要。