2009-08-05 15 views
4

Windowの中にコンポーネント(JPanel)があります。 windowGainedFocus()イベント(親ウィンドウにフォーカスが当たったとき)から呼び出すときは、いつもpanel.isShowing()、 を呼び出すときはいつもfalseが得られます。コンポーネントがJavaで表示されるまでどのように待つことができますか?

windowGainedFocus()イベントが呼び出されたとき、Window内のJPanelの絵はまだ完成していなかったとします。

私はこのWindowpaint()方法、 にその呼び出しisShowing()を配置しようとしていたが、私はいつも= falseisShowing()を取得します。

JPanelが画面に完全に表示され、isShowing()メソッドがtrueを返すと、イベントが発生する可能性はありますか?あなたがイベントをしたいが、後に実行する必要のあるいくつかの特定のコードをお持ちでない場合は

panel.addHierarchyListener(new HierarchyListener() { 
    public void hierarchyChanged(HierarchyEvent e) { 
     if ((HierarchyEvent.SHOWING_CHANGED & e.getChangeFlags()) !=0 
      && panel.isShowing()) { 
      //do stuff 
     } 
    } 
}); 

答えて

12

コンポーネントが描画されている場合は、addNotify()をオーバーライドしてコンポーネントを表示可能にすることができます。例:

public void addNotify() 
{ 
    super.addNotify(); 
    // at this point component has been displayed 
    // do stuff 
} 
1

:あなたはパネル自体の階層リスナーと、おそらく最善のアプローチこれをすべき

おかげ

0

コンポーネントは、WindowListener.windowActivatedを受け取った後に完全に表示されます。 windowActivatedイベントの前にフォーカスを割り当てようとすると、タイミングの問題や競合状態に陥ります。

関連する問題