UIエディタを使用してGridBagLayoutコンテナを作成する場合、JDeveloperでは、コンテナに追加する各コンポーネントに対してGridBagConstraintsオブジェクトが自動的にインスタンス化されます。デフォルトの制約値、または(XYLayoutのような)別のレイアウトからGridBagLayoutへの変換中に既存のコンポーネントについて計算された値(あるいはその両方)が使用されます。これらの制約を編集するには、「制約」プロパティ・エディタを使用します。
「制約」プロパティ・エディタには、次の2つの方法でアクセスできます。
インスペクタ内のコンポーネントのconstraints
プロパティ
プロパティ・エディタでの制約はそれぞれ、次のセクションで示すようにGridBagConstraints.class
からの制約に直接対応しています。
「グリッド位置」制約の「X」(gridx
)および「Y」(gridy
)を使用して、コンポーネントの左上隅のグリッド・セル位置を指定します。この制約値は、列または行内のセル番号を表す整数です。たとえば、gridx=0
は一番左の列、gridy=0
は一番上の行です。したがって、gridx=0
およびgridy=0
制約を指定したコンポーネントは、グリッドの最初のセル(一番上の左)に配置されます。
gridx
およびgridy
には、RELATIVE
(デフォルト値)という制約値も指定できます。RELATIVE
により、コンポーネントが次のように、前のコンポーネントと相対的に配置されるよう指定します。
gridx
に使用した場合、このコンポーネントをその直前に追加した最後のコンポーネントのすぐ右側に配置するように指定します。gridy
に使用した場合、このコンポーネントをその直前に追加した最後のコンポーネントのすぐ下に配置するように指定します。 「制約」プロパティ・エディタで「グリッド位置」の「X」または「Y」にRELATIVE
値を指定するには、-1
を入力します。
「グリッド位置」制約の「幅」(gridwidth
)および「高さ」(gridheight
)を使用して、コンポーネントが使用する行内のセルの数(gridwidth
)または列内のセルの数(gridheight
)を指定します。この制約値は、ピクセル数ではなく、列または行内のセルの数を表す整数です。
gridwidth
およびgridheight
には、RELATIVE
およびREMAINDER
という2つの制約値も指定できます。
RELATIVE
は、このコンポーネントが行(gridwidth
)または列(gridheight
)の最後から2番目のコンポーネントであることを指定します。RELATIVE
を使用するコンポーネントは、最後のセル以外の残りのすべてのセルを占有します。たとえば、6列の行で、コンポーネントが3番目の列から始まった場合、RELATIVE
のgridwidthを指定すると、コンポーネントは第3、第4および第5列を使用することになります。
REMAINDER
は、このコンポーネントが行(gridwidth
)または列(gridheight
)の最後のコンポーネントであることを指定します。
RELATIVE
値を指定するには、-1
を入力します。
REMAINDER
値を指定するには、0
を入力します。
insets
)を使用して、コンポーネントとその表示領域の外枠までの外部スペース(パディング)の最小値を(ピクセル単位で)指定します。コンポーネントの上下左右に対して別々に値を指定できます。「サイズ・パディング」によって、コンポーネントの内部パディング(セル内部のコンポーネント周りのスペース)を指定します。「幅」(ipadx
)および「高さ」(ipady
)を使用して、コンポーネントの最小サイズに内部パディングとして追加するスペースを(ピクセル単位で)指定します。
コンポーネントの幅は、その最小幅にipadx
のピクセル値を足した値以上になります(Javadocのコメントにはipadx
*2と記載されていますが、実際のコードでは1回しか加算されません)。同様に、コンポーネントの高さは、少なくとも最小の高さプラスipady
(ピクセル単位)となります。
次に例を示します。
幅が30ピクセルで高さが20ピクセルのコンポーネントに追加する場合、次のようになります。
「幅」が4の場合、コンポーネントの幅は34ピクセルになります。
ipadx
)では、コンポーネントの最小幅に追加するピクセル数を指定します。ipady
)では、コンポーネントの最小の高さに追加するピクセル数を指定します。 「スペース配分」制約を使用して、コンテナのサイズを変更したときに垂直方向(weightx
)および水平方向(weighty
)に余白を配分する方法を指定します。「スペース配分」によって、コンテナがデフォルト・サイズから拡大されたときに、各コンポーネントが取得する余白の割合が決まります。
たとえば、コンテナが拡大された際に3つのコンポーネントのスペース配分がそれぞれ0.0、0.3および0.2であるとすると、余白は最初のコンポーネントには割り当てられず、2番目のコンポーネントには3/5が、3番目には2/5が割り当てられます。
注意: すべてのコンポーネントのスペース配分が1つの方向で0(ゼロ)に指定されている場合、その方向については、コンポーネントはコンテナの中央に集まり、指定サイズより大きくなりません。GridBagLayout
では、セルのグリッドとコンテナの枠との間に余白ができます。
スペース配分の値はdouble
型で、0.0から1.0の範囲(0.0と1.0を含む)の数値を指定します。0(ゼロ)は、コンポーネントに余白が割り当てられないことを意味し、1.0はコンポーネントに余白がすべて割り当てられることを意味します。
weightx
)は、コンポーネントの垂直方向のスペース配分を表します。行のスペース配分は、その行の全コンポーネントの最大weightx
となるよう計算されます。 weighty
)は、コンポーネントの水平方向のスペース配分を表します。列のスペース配分は、その列の全コンポーネントの最大weighty
となるように計算されます。 コンポーネントが表示領域より小さい場合、配置指定(anchor
制約)を使用して、レイアウト・マネージャに領域内でのコンポーネントの位置を指示します。配置指定(anchor
制約)は、表示領域より小さいコンポーネントにのみ作用し、最大サイズ化(fill
制約)の影響を受けます。
たとえば、コンポーネントの最大サイズ化(fill
制約値)が両方(BOTH
: 表示領域の水平、垂直両方向に最大サイズ化される)の場合、コンポーネントが使用可能な領域全体を占有するため、anchor
制約は影響を与えません。anchor
制約を有効にするには、fill
制約値をなし(NONE
)、水平方向(HORIZONTAL
)または垂直方向(VERTICAL
)に設定します。
anchor
の値は、次のようになります。
|
|
|
|
|
|
|
|
|
コンポーネントの表示領域がコンポーネントの要求サイズよりも大きい場合、最大サイズ化(fill
制約)を使用して、コンポーネントのサイズ変更が必要かどうか、また必要な場合はその方法をレイアウト・マネージャに指示します。配置指定(anchor
制約)と同様、最大サイズ化(fill
制約)は表示領域より小さいコンポーネントのみに作用します。最大サイズ化(fill
制約)は、コンポーネントが指定領域の最大サイズになるよう、レイアウト・マネージャに指示します。
fill
の値は、次のようになります。
|
コンポーネントのサイズは変更しません。 |
|
領域の水平方向のみに最大になるよう、コンポーネントのサイズを変更します。 |
|
領域の垂直方向のみに最大になるよう、コンポーネントのサイズを変更します。 |
|
領域の垂直、水平両方向に最大になるよう、コンポーネントのサイズを変更します。 |