- PR -

表示させる前にタイトルバーの高さなどを得るには?

1
投稿者投稿内容
Raja
会議室デビュー日: 2004/03/19
投稿数: 2
投稿日時: 2004-03-19 19:59
AWTやSwingでは、すでに表示させたFrameに対しては、frame.getInsets()で
タイトルバーの高さなどが分かり、本当に使える部分の大きさが把握できます。
できれば、show()で表示させる前に、このInsetsに相当する情報がほしいのです。
java.swing.UIManagerクラスのメソッドを駆使するのかなとも思っていますが
行き詰まっています。
ぜひご教授お願いいたします。
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2004-03-20 04:51
こんにちは、さくらばです。

引用:

Rajaさんの書き込み (2004-03-19 19:59) より:
AWTやSwingでは、すでに表示させたFrameに対しては、frame.getInsets()で
タイトルバーの高さなどが分かり、本当に使える部分の大きさが把握できます。
できれば、show()で表示させる前に、このInsetsに相当する情報がほしいのです。



frame.pack() か frame.addNotify() をコールすればインセットの値が確定します。
frame.setVisible(true) をする前に、どちらかのメソッドをコールして、インセッ
トを取得するようにすればいいのではないでしょうか。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-03-20 15:20
unibon です。こんにちわ。

引用:

Rajaさんの書き込み (2004-03-19 19:59) より:
AWTやSwingでは、すでに表示させたFrameに対しては、frame.getInsets()で
タイトルバーの高さなどが分かり、本当に使える部分の大きさが把握できます。
できれば、show()で表示させる前に、このInsetsに相当する情報がほしいのです。


あまりたしかな回答ではないかもしれませんが、ピアを作ったあとでないと本当の大きさは分からず、ピアを作るためには表示してしまうしかなく、したがって表示するまでは大きさは判明しないような気がします。
また、フレームを構成する要素にはタイトルバー以外にもさまざまなもの(枠の太さとか)があると思いますので、フレームの大きさからタイトルバーの大きさを引き算しても、誤差があります。やはり、実際に使いたい Component の大きさを取得したほうが厳密で良いのではないでしょうか。
(Frame ではなく) 使いたい Component に対して ComponentListener を設定して、Component がリサイズ等されるたびに、大きさを計算し直すほうが良いかもしれません。
Raja
会議室デビュー日: 2004/03/19
投稿数: 2
投稿日時: 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 ]
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-03-23 16:29
よくわからないのですが...
コンストラクタ内でaddNotify()なり、pack()なりするのはダメなのですか?
1

スキルアップ/キャリアアップ(JOB@IT)