Previous | Next | Trail Map | Creating a User Interface | コンテナ内にコンポーネントを配置する


GridBagLayout の使用方法: 制約を指定する

以下に、GridBagLayout(in the API reference documentation) を使用するコンテナで典型的に見られるコードを示す。(次のページで完成された例を見ることができる。)

GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setLayout(gridbag);

//このコンテナに追加するコンポーネントごとに:
//...コンポーネントを作成する...
//...GridBagConstraints インスタンスでインスタンス変数を設定する  
...
gridbag.setConstraints(theComponent, c);
add(theComponent);

上記の例から推測できるように、同じ GridBadConstraints インスタンスを複数のコンポーネントで再利用できる。これは、コンポーネントの制約が異なっている場合でも同様である。 GridBagLayout は制約値を抽出するのであって、GridBagConstraints を再度使用するわけではない。ただし、GridBagConstraints のインスタンス変数を必要に応じて既定値に戻すときには注意が必要である。

以下に示すGridBagConstraints(in the API reference documentation) インスタンス変数を設定することができる。

gridx, gridy
コンポーネントの左上の行と列を指定する。 左端の列のアドレスは girdx=0、一番上の行のアドレスはgridy=0である。このコンポーネントが追加される直前にコンテナに追加されたコンポーネントのすぐ右側 (gridx の場合) またはすぐ下 (gridy の場合) にコンポーネントを配置するよう指定するときは、GridBagConstraints.RELATIVE (これは既定値) を使用する。

gridwidth, gridheight

コンポーネントの表示エリアの列数 (gridwidth の場合) または行数 (gridheight の場合) を指定する。このような制約はコンポーネントが使用するセルの数を指定するものであって、ピクセルの数ではない。 既定値は 1 である。 コンポーネントがその行 (gridwidth の場合) または列 (gridheight の場合) の最後の 1 つであることを指定するときは、GridBagConstraints.REMAINDER を使用する。 コンポーネントがその行 (gridwidth の場合) または列 (gridheight の場合) の最後から 2 番目であることを指定するときは 、GridBagConstraints.RELATIVE を使用する。

注: Java 1.0 リリースのバグにより、GridBagLayout では、コンポーネントが左端の列にある場合を除き、コンポーネントを複数の行にスパン化することができない。

fill

コンポーネントの表示エリアがコンポーネントの要求サイズより大きい場合に、コンポーネントのサイズを変更するか、またどのように変更するかを決めるために使用する。有効な値は、GridBagConstraints.NONE (既定値)、GridBagConstraints.HORIZONTAL (表示エリアの水平方向を埋めるようコンポーネントの幅を広げるが高さは変えない)、GridBagConstraints.VERTICAL (表示エリアの垂直方向を埋めるようコンポーネントを高くするが幅は変えない)、およびGridBagConstraints.BOTH (表示エリア全体を埋めるようコンポーネントを大きくする)である。

ipadx, ipady

コンポーネントの最小サイズに追加する内部パディングの量を指定する。 既定値はゼロである。 コンポーネントの幅は、少なくともその最小の幅に ipadx*2 ピクセルを加えたものとなる (これは、パディングがコンポーネントの両サイドに適用されるからである)。同様に、コンポーネントの高さは、少なくともその最小の高さにipady*2 ピクセルを加えたものとなる。

insets

コンポーネントとその表示エリアのエッジの間の最小のスペース量である、コンポーネントの外部パディングを指定する。 この値は、Insets(in 
the API reference documentation) オブジェクトとして指定される。 デフォルトでは、各コンポーネントは外部パディングをもたない。

anchor

コンポーネントがその表示エリアより小さい場合に、(そのエリア内の) どこにコンポーネントを配置するかを決めるために使用する。有効な値は、GridBagConstraints.CENTER (既定値)、GridBagConstraints.NORTHGridBagConstraints.NORTHEASTGridBagConstraints.EASTGridBagConstraints.SOUTHEASTGridBagConstraints.SOUTHGridBagConstraints.SOUTHWESTGridBagConstraints.WEST、およびGridBagConstraints.NORTHWESTである。

weightx, weighty

重みの指定は、GridBagLayout が制御するコンポーネントの外観に重要なインパクトを与える技術である。 重みは、スペースを複数の列 (weightx) と複数の行 (weighty) にどのように分配するかを決めるために使用される。これはサイズ変更時の振る舞いを指定するのに重要である。

weightxweighty の少なくともどちらかにゼロでない値を指定しないかぎり、すべてのコンポーネントはコンテナの中央部にかたまる。これは、重みが 0.0 (既定値) の場合は GridBagLayout がセルのグリッドとコンテナのエッジの間に特別なスペースを配置するからである。

一般に、重みは 0.0 と 1.0 を極値とし、その間の数が必要に応じて指定される。 数が大きいほど、そのコンポーネントの行または列のスペースが大きくなることを表す。各列において、重みはその列の中でコンポーネントに指定されている最も高い weightx と関係づけられる (複数列にわたるコンポーネントの重みはそのコンポーネントがある列の間で何らかの形で分割される)。 同様に、各行において、行の重みはその行の中でコンポーネントに指定されている最も高い weighty と関係づけられる。増えたスペースは、右端の列と一番下の行で使われることが多い。

次のページでは、アプレット例が動作する仕組みを解説しながら、制約についてさらに深く説明する。


Previous | Next | Trail Map | Creating a User Interface | コンテナ内にコンポーネントを配置する