Java で JFrame のサイズ設定には
を使用するが、ここで設定されるサイズはタイトルバーやボーダーを含むフレーム全体の大きさになる。
JFrameでコンテントペインの大きさを設定したい場合は、
で insets (java.awt.Insets クラスのインスタンス) を取得しその大きさを加える必要がある。
ただし、注意点として pack(); または setVisible(true); でフレームを表示可能にしなければ正確な insets は求められない。
※ Windows XP 上でテストしてみると、非表示状態では insets はすべて 0 で、表示状態では insets: top=30 left=4 bottom=4 right=4 となった。top が大きいのはタイトルバーのためである。
もし、非表示の状態で色々設定をやるのであれば、下のようなコードで一時的に表示状態に切り替え insets を取得する必要があるようだ。
もう少しスマートな方法はないのだろうか? --> (2) へ
クラス java.awt.Component にある public void setSize(int width, int height); または public void setSize(Dimension d);
を使用するが、ここで設定されるサイズはタイトルバーやボーダーを含むフレーム全体の大きさになる。
JFrameでコンテントペインの大きさを設定したい場合は、
クラス java.awt.Container にある public Insets getInsets();
で insets (java.awt.Insets クラスのインスタンス) を取得しその大きさを加える必要がある。
ただし、注意点として pack(); または setVisible(true); でフレームを表示可能にしなければ正確な insets は求められない。
※ Windows XP 上でテストしてみると、非表示状態では insets はすべて 0 で、表示状態では insets: top=30 left=4 bottom=4 right=4 となった。top が大きいのはタイトルバーのためである。
もし、非表示の状態で色々設定をやるのであれば、下のようなコードで一時的に表示状態に切り替え insets を取得する必要があるようだ。
setVisible(true); Insets insets = getInsets(); setVisible(false); int width = 希望する幅 + insets.left + insets.right; int height = 希望する高さ + insets.top + insets.bottom; setSize(width, height);
もう少しスマートな方法はないのだろうか? --> (2) へ
※コメント投稿者のブログIDはブログ作成者のみに通知されます