我怎么能等到组件以Java显示?

时间:2009-08-05 20:47:09

标签: java swing

我在JPanel中有一个组件(Window)。 致电false时,我总是panel.isShowing(), 从windowGainedFocus()事件调用时(父窗口获得焦点时)。

我假设在调用windowGainedFocus()事件时,此JPanelWindow的绘画尚未完成。

我试图将此调用isShowing()置于此paint()的{​​{1}}方法上, 但我总是Window = isShowing()

false完全显示在屏幕上并且JPanel方法将返回true时,我是否可以获得一个事件?

谢谢

3 个答案:

答案 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事件之前指定焦点的计时问题和竞争条件。