- - PR -
表示させる前にタイトルバーの高さなどを得るには?
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-03-19 19:59
AWTやSwingでは、すでに表示させたFrameに対しては、frame.getInsets()で
タイトルバーの高さなどが分かり、本当に使える部分の大きさが把握できます。 できれば、show()で表示させる前に、このInsetsに相当する情報がほしいのです。 java.swing.UIManagerクラスのメソッドを駆使するのかなとも思っていますが 行き詰まっています。 ぜひご教授お願いいたします。 | ||||
|
投稿日時: 2004-03-20 04:51
こんにちは、さくらばです。
frame.pack() か frame.addNotify() をコールすればインセットの値が確定します。 frame.setVisible(true) をする前に、どちらかのメソッドをコールして、インセッ トを取得するようにすればいいのではないでしょうか。 | ||||
|
投稿日時: 2004-03-20 15:20
unibon です。こんにちわ。
あまりたしかな回答ではないかもしれませんが、ピアを作ったあとでないと本当の大きさは分からず、ピアを作るためには表示してしまうしかなく、したがって表示するまでは大きさは判明しないような気がします。 また、フレームを構成する要素にはタイトルバー以外にもさまざまなもの(枠の太さとか)があると思いますので、フレームの大きさからタイトルバーの大きさを引き算しても、誤差があります。やはり、実際に使いたい Component の大きさを取得したほうが厳密で良いのではないでしょうか。 (Frame ではなく) 使いたい Component に対して ComponentListener を設定して、Component がリサイズ等されるたびに、大きさを計算し直すほうが良いかもしれません。 | ||||
|
投稿日時: 2004-03-20 18:20
お返事ありがとうございました。実験させていただいたところ、たしかに表示する前にaddNotify()を呼び出せば、Insetsを得ることができました。System.out.println(frame.getInsets());で、java.awt.Insets[top=23,left=4,bottom=4,right=4]と表示されました(Windows環境)。
ただ、frameの中の描画が、Insetsの大きさに依存する場合、frameのインスタンス化が終わる前に、Insetsを得る必要があります。例えば、frameの左半分だけある色で塗る、といった場合、frameのコンストラクタ内で、Insetsがほしいものです。 Frameのカラのコンストラクタを作って、ダミーのframeをインスタンス化し、そこでInsetsを得て、本命のframeを作らざるを得ないのでしょうか? 何か良い知恵がございましたら、ぜひご書き込みお願いいたします。 [ メッセージ編集済み 編集者: Raja 編集日時 2004-03-20 18:29 ] | ||||
|
投稿日時: 2004-03-23 16:29
よくわからないのですが...
コンストラクタ内でaddNotify()なり、pack()なりするのはダメなのですか? | ||||
1
