を拡張するクラス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()
は複数回呼び出されます...
* "問題は、親のLayoutManagerがサイズを計算するとすぐにMyPanelに通知する必要があることです。"あなたのアプリケーションにはどんな特別な能力がありますか?それは何を達成するのですか? –
パネルのサイズに応じていくつかの変数を初期化する必要があるからです – Oneiros
解決できない場合は、 'preferredSize()'と 'pack()'をフレームに設定し、フレームをサイズ変更できないようにしてください。 –