2012-05-04 7 views
2

を拡張するクラスMyPanelがあります。
MyPanelは子パネルです:彼のサイズは、親のLayoutManagerによってdinamically計算されます。
問題は、親のLayoutManagerが自分のサイズを計算するとすぐに通知する必要があることです。
パネルのサイズに応じていくつかの変数を初期化する必要があるため、通知する必要があります。

MyPanelコンストラクタでgetSize()を呼び出すと、パネルが「準備完了」状態でないため、(0,0)が返されます。
getSize()はいつ呼び出す必要がありますか?

私はこのような何かを持っているしたいと思います:サイズ変更時にLayoutManagerから通知されるJPanel

/** Lays out the panel and sets his size according to his layout */ 
@Override 
public void onReady() { 
    System.out.println(getSize()); //output is (0,0); 
    super.onReady(); 
    System.out.println(getSize()); //output is (600,500); 
    //here i can initialize my variables 
} 

は似たものがありますか?たぶんdoLayout()

paintComponent()メソッドでgetSize()を呼び出す唯一の方法は... paintComponent()が呼び出されたときにパネルが確実に表示されますが、私はすぐにいくつかの変数を初期化する必要があるため、これを行うことはできませんパネルのサイズを知っている...しかし、一度だけ! paintComponent()は複数回呼び出されます...

+0

* "問題は、親のLayoutManagerがサイズを計算するとすぐにMyPanelに通知する必要があることです。"あなたのアプリケーションにはどんな特別な能力がありますか?それは何を達成するのですか? –

+0

パネルのサイズに応じていくつかの変数を初期化する必要があるからです – Oneiros

+0

解決できない場合は、 'preferredSize()'と 'pack()'をフレームに設定し、フレームをサイズ変更できないようにしてください。 –

答えて

4
+0

-1:ハードリンクが切れています。私はいくつかの関連する引用符を含めることをお勧めします...今のところ、あなたの答えは役に立たないです。 – ArtOfWarfare

+0

@ArtOfWarfareは今すぐリンクが壊れている場合は修正してください。正直言って、ダウン投票はかなり不自由です。 –

4

ComponentListenerを使用することをお勧めします。

参照ComponentListener.componentResized(ComponentEvent)

関連する問題