我不知道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()
会要求面板处于聚焦状态。使用,它仅添加侦听器。希望只能调用一次,尽管在此代码示例中无法保证。