我在JPanel
中有一个组件(Window
)。
致电false
时,我总是panel.isShowing()
,
从windowGainedFocus()
事件调用时(父窗口获得焦点时)。
我假设在调用windowGainedFocus()
事件时,此JPanel
中Window
的绘画尚未完成。
我试图将此调用isShowing()
置于此paint()
的{{1}}方法上,
但我总是Window
= isShowing()
。
当false
完全显示在屏幕上并且JPanel
方法将返回true时,我是否可以获得一个事件?
谢谢
答案 0 :(得分:12)
最好通过面板本身的层次结构监听器来解决这个问题:
panel.addHierarchyListener(new HierarchyListener() {
public void hierarchyChanged(HierarchyEvent e) {
if ((HierarchyEvent.SHOWING_CHANGED & e.getChangeFlags()) !=0
&& panel.isShowing()) {
//do stuff
}
}
});
答案 1 :(得分:1)
如果您不想要一个事件但是在绘制组件后需要运行某些特定代码,则可以覆盖addNotify()
,调用它以使组件可显示。例如:
public void addNotify()
{
super.addNotify();
// at this point component has been displayed
// do stuff
}
答案 2 :(得分:0)
收到WindowListener.windowActivated后,您的组件将完全显示。您还将遇到尝试在windowActivated事件之前指定焦点的计时问题和竞争条件。