UIクラスがFrame
またはDialog
の場合は、サイズと位置を実行時に制御できます。サイズと位置は、UIウィンドウ作成時のコードの内容と、ユーザーがサイズ変更または再配置のために実行する操作によって決定されます。
UIウィンドウを作成して各種コンポーネントを追加すると、追加した各コンポーネントがウィンドウ全体のpreferredSize
に影響し、通常はコンポーネントを追加するたびにウィンドウ・コンテナのpreferredSize
が大きくなります。このpreferredSize
に対する効果は、外側のコンテナのレイアウト・マネージャおよびネストしたコンテナのレイアウトによって異なります。各種レイアウトのpreferredLayoutSize
の計算方法の詳細は、このドキュメントの各レイアウト・タイプの項を参照してください。
UIウィンドウのサイズはプログラムにより(ユーザーが追加のサイズ変更を行う前に)設定され、次のコンテナ・メソッドのうちコードで最後にコールされるメソッドにより決定されます。
pack()
setSize()
実行時のUIの位置は、コンテナのlocation
プロパティを(たとえば参照可能にする前にsetLocation()
をコールして)設定してオーバーライドしなければ、0,0になります。
pack()
による自動的なウィンドウ・サイズ設定
pack()
メソッドでは、中に含まれているコンポーネントに基づいてウィンドウのpreferredSize
が計算され、計算結果に従ってウィンドウ自体のサイズが設定されます。pack()
では中に配置されたコンポーネントのpreferredSize
も考慮した上で、可能な範囲内で最小のウィンドウが作成されます。
注意: 「新規アプリケーション」ダイアログで作成されるApplication.javaファイルでは、pack()
がコールされ、フレームは参照可能になる前にpreferredSize
まで圧縮されます。
コンテナのpreferredSize
の計算方法
preferredSize
の計算方法は、コンテナとレイアウトによって異なります。
移植性のあるレイアウト
移植性のあるレイアウト(FlowLayout
やBorderLayout
など)のpreferredSize
は、レイアウト・ルールとコンテナに追加された各コンポーネントのpreferredSize
の組合せに基づいて計算されます。コンポーネントのいずれかがコンテナ(Panel
など)の場合、そのPanel
のpreferredSize
はレイアウトおよびコンポーネントに従って計算されます。レイアウトの計算は、必要に応じてネストしたコンテナのレイヤーの数だけ再帰的に繰り返されます。特定のレイアウトに関するpreferredSize
の計算の詳細は、そのレイアウトの説明を参照してください。
XYLayout
XYLayout
コンテナのpreferredSize
は、XYLayout
のwidthおよびheightプロパティの指定値で定義されます。たとえば、コンテナの初期化中に次のコード行があるとします。
xYLayoutN.setWidth(400);
xYLayoutN.setHeight(300);
この場合、xYLayoutN
がコンテナのレイアウト・マネージャであれば、そのpreferredSizeは400 x 300ピクセルとなります。
UI内のネストしたパネルの1つにXYLayout
が使用されている場合、そのパネルのpreferredSizeはレイアウトのsetWidth()
コールとsetHeight()
コールによって決定されます。この値は、次(外側)のコンテナのpreferredSize
を計算する際にパネルに使用されます。
setSize()
によるウィンドウ・サイズの明示的な設定
コンテナに対して(pack()
または以降のpack()
のコールではなく)setSize()
をコールすると、コンテナのサイズはピクセル単位で特定のサイズに設定されます。setSize()
により、コンテナに対するpack()
およびpreferredSize
の効果がオーバーライドされます。
重要: ピクセル・サイズは画面ごとに異なるため、setSize()
を使用する場合は、子コンテナが正しくレイアウトされるようにvalidate()
をコールする必要があります。pack()
が自動的にvalidate()
をコールすることに注意してください。
各種プラットフォームに移植可能にするためのUIのサイズ設定
UIを移植可能にするには、pack()
を使用するか、アプリケーションがデプロイされる各種画面のピクセル・サイズに基づいてsetSize()
で使用する適切なサイズを計算します。
たとえば、UIを画面の幅と高さの75%で表示するとします。UIがこのサイズで表示されるように、pack()
をコールするかわりにアプリケーション・クラスに次のコード行を追加できます。
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize.width * 3 / 4, screenSize.height * 3 / 4);
注意: 移植性を保証するために、すべてのXYLayout
コンテナをプロトタイプ作成後に移植可能なレイアウトに変更します。
画面上のウィンドウ配置
UIを明示的に配置しなければ、画面の左上隅に表示されます。
UIを画面中央に表示するには、画面の幅と高さを取得し、UIの幅と高さを減算して差を2で除算し(UIの上下と左右に均等の余白を作成するため)、これらの値をUIの左上隅の位置に使用します。
「新規アプリケーション」ダイアログで「フレームを画面の中央に配置」オプションを選択すると、この計算が実行されて次のコードが生成されます。
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height)
frameSize.height = screenSize.height;
if (frameSize.width > screenSize.width)
frameSize.width = screenSize.width;
frame.setLocation((screenSize.width- frameSize.width) / 2, (screenSize.height - frameSize.height) /2);
コードへのサイズ設定メソッド・コールと配置メソッド・コールの挿入
pack()
、validate()
、setSize()
またはsetLocation()
は、UIコンテナ・クラス(this.pack()
など)の内側からコールできます。これらのコールは、コンテナを作成するクラス(frame.pack()
など)から、コンストラクタの起動後、setVisible()
の前に実行することもできます。後者は、「新規アプリケーション」ダイアログで生成されたコードの動作です。pack()
またはvalidate()
およびsetLocation()
は、フレームの作成後(jbInit()
のコール後)にApplicationクラスに配置されます。
アプリケーション内の様々な場所からUIを作成し、そのUIのサイズと位置を同じにする場合は、コールをUIコンテナ・クラスのコンストラクタ(jbInit()
のコールの後)に挿入します。「新規アプリケーション」ダイアログで生成されたアプリケーションのように、アプリケーションで1箇所からのみUIがインスタンス化される場合は、サイズ設定コードと配置コードをUIの作成場所(この場合はApplicationクラス)に挿入します。
Copyright © 1997, 2006, Oracle. All rights reserved.