我不知道super.addNotify()requestFocus()JPanel方法一般如何工作,尤其是在下面的代码中如何工作:

public class Panel extends JPanel
implements keyListener, MouseListener, MouseMotionListener {

    public Panel() {
        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setFocusable(true);
        requestFocus();
}

    public void addNotify() {
        super.addNotify();
        if (thread == null) {
            addKeyListener(this);
            addMouseListener(this);
            addMouseMotionListener(this);
            thread = new Thread(this);
            thread.start();
        }
    }

    // Some unrelated code follows

}


有人可以给我解释一下吗?

最佳答案

每当将addNotify()添加到Component时,都会调用Container。因此,可以使用此方法来获取父级信息,而不必担心有null父级的风险,而在构造函数中,父级requestFocus()的可能性更大。

Component请求将给定的requestFocusInWindow()设置为聚焦状态。此方法要求组件是可显示的,可聚焦的,可见的,并且其所有祖先也都可见。最好调用JPanel,因为该方法不依赖于平台。

在代码示例中,您的KeyLisener发送一个要集中的请求。这很有用,因为实施addNotify()会要求面板处于聚焦状态。使用,它仅添加侦听器。希望只能调用一次,尽管在此代码示例中无法保证。

09-03 21:47