public class GridBagLayout extends Object implements LayoutManager2, Serializable
GridBagLayout
クラスは、コンポーネントが同じサイズであることを要求することなく、コンポーネントを垂直方向に、水平方向に、またはベースラインに沿って配置する柔軟なレイアウト・マネージャです。それぞれのGridBagLayout
オブジェクトは、セルによって構成される動的な矩形グリッドを格納しています。各コンポーネントは、1つ以上のセル(表示領域と呼ぶ)に配置されます。
GridBagLayout
によって管理される各コンポーネントは、GridBagConstraints
のインスタンスと関連します。制約オブジェクトは、コンポーネントの表示領域をグリッド上に配置する場所、およびコンポーネントをその表示領域内に配置する方法を指定します。また、この制約オブジェクトに加え、GridBagLayout
は、コンポーネントのサイズを決定するために、各コンポーネントの最小サイズおよび推奨サイズを考慮します。
グリッドの全体の方向は、コンテナのComponentOrientation
プロパティによって決まります。水平方向に左から右の場合、グリッドの座標(0, 0)はコンテナの左上隅になります。この場合、X座標は右方向に、Y座標は下方向に値が増加します。水平方向に右から左の場合、グリッドの座標(0, 0)はコンテナの右上隅になります。この場合、X座標は左方向に、Y座標は下方向に値が増加します。
グリッド・バッグ・レイアウトを効果的に利用するには、コンポーネントの少なくとも1つのGridBagConstraints
オブジェクトをカスタマイズする必要があります。GridBagConstraints
オブジェクトをカスタマイズするには、1つまたは複数のインスタンス変数を設定します。
GridBagConstraints.gridx
, GridBagConstraints.gridy
gridx = 0
、gridy = 0
です。水平方向に左から右へのレイアウトの場合、コンポーネントのリーディング・コーナーは左上隅です。水平方向に右から左へのレイアウトの場合、コンポーネントのリーディング・コーナーは右上隅です。GridBagConstraints.RELATIVE
(デフォルト値)を使用して、コンポーネントを、このコンポーネントが追加される直前にコンテナに追加されたコンポーネントの直後に(gridx
はx軸に沿って、gridy
はy軸に沿って)配置するよう指定します。
GridBagConstraints.gridwidth
, GridBagConstraints.gridheight
gridwidth
)または1列(gridheight
)あたりのセルの数を指定します。デフォルト値は1です。コンポーネントの表示領域がgridx
から行の最後のセルまで(gridwidth
)またはgridy
から列の最後のセルまで(gridheight
)であることを指定する場合は、GridBagConstraints.REMAINDER
を使用します。コンポーネントの表示領域がgridx
から、行の最後から2番目のセルまで(gridwidth
)、またはgridy
から、列の最後から2番目のセルまで(gridheight
)であることを指定する場合は、GridBagConstraints.RELATIVE
を使用します。
GridBagConstraints.fill
GridBagConstraints.NONE
(デフォルト)、GridBagConstraints.HORIZONTAL
(コンポーネントの高さは変更せずに、幅を表示領域最大にする)、GridBagConstraints.VERTICAL
(コンポーネントの幅は変更せずに、高さを表示領域最大にする)、GridBagConstraints.BOTH
(コンポーネントを表示領域最大にする)です。
GridBagConstraints.ipadx
, GridBagConstraints.ipady
ipadx
ピクセルとなります。同様に、コンポーネントの高さは、少なくとも最小の高さ+ipady
ピクセルとなります。
GridBagConstraints.insets
GridBagConstraints.anchor
ComponentOrientation
プロパティを基準にして解釈されますが、絶対値には解釈はありません。ベースライン相対値は、ベースラインを基準にして計算されます。有効な値は次のとおりです。
絶対値 |
方向相対値 |
ベースライン相対値 |
---|---|---|
|
|
|
GridBagConstraints.weightx
, GridBagConstraints.weighty
weightx
)または1列(weighty
)につき、少なくとも1つのコンポーネントにウエイトを設定しないかぎり、すべてのコンポーネントがコンテナの中央に集まります。これは、ウエイトが0の場合(デフォルト)には、GridBagLayout
オブジェクトが余分なスペースをすべてセルのグリッドとコンテナの端の間に配置してしまうからです。
各行にはベースラインがある場合があります。行のベースラインは、その行で有効なベースラインを持つコンポーネントによって決定され、コンポーネントはベースラインに沿って配置されます。コンポーネントのanchor値は、BASELINE
、BASELINE_LEADING
、BASELINE_TRAILING
のいずれかです。行内でいずれのコンポーネントも有効なベースラインを持たない場合、その行にベースラインはありません。
複数の行にまたがるようなコンポーネントは、開始行のベースライン(ベースライン・サイズ変更動作がCONSTANT_ASCENT
の場合)、または終了行のベースライン(ベースライン・サイズ変更動作がCONSTANT_DESCENT
の場合)に沿って配置されます。コンポーネントが沿う行は、支配行と呼ばれます。
次の図に、ベースラインのレイアウトを示します。この図では複数行にまたがるコンポーネントが存在します。
CONSTANT_DESCENT
とアンカーBASELINE
が設定されています。ベースライン・サイズ変更動作がCONSTANT_DESCENT
であるため、パネルの支配行は行1です。
CENTER_OFFSET
とアンカーBASELINE
が設定されています。
ベースライン相対値のいずれかを使用して配置されたコンポーネントは、絶対値または方向相対値を使用して配置した場合と異なる方法でサイズが変更されます。コンポーネントの変更方法は、支配行のベースラインの変更方法によって指示されます。同じ支配行を持つ任意のコンポーネントでベースライン・サイズ変更動作CONSTANT_DESCENT
が設定されている場合、ベースラインは表示領域の下端にアンカー設定されます。そうでない場合、ベースラインは表示領域の上端にアンカー設定されます。次のルールによってサイズ変更動作が指示されます。
OTHER
が設定されたサイズ変更可能コンポーネントの場合は、サイズ変更後のサイズのベースラインが表示領域に収まる場合に限り、サイズ変更されます。ベースラインが表示領域内に収まらなくなる場合、コンポーネントはサイズ変更されません。
OTHER
ではないベースラインに配置されたコンポーネントは、display height - baseline+baseline of component
まで高くすることができます。
次に示す図は、グリッド・バッグ・レイアウトによって管理される10個のコンポーネント(すべてのボタン)を示します。図2は水平方向に左から右へのコンテナを示し、図3は水平方向に右から左へのコンテナを示します。
図2: 水平方向に左から右 | 図3: 水平方向に右から左 |
10個のコンポーネントのそれぞれは、その関連しているGridBagConstraints
オブジェクトのfill
フィールドがGridBagConstraints.BOTH
に設定されています。さらにコンポーネントは、デフォルトとは異なる次の制約を持っています。
weightx = 1.0
weightx = 1.0
, gridwidth = GridBagConstraints.REMAINDER
gridwidth = GridBagConstraints.REMAINDER
gridwidth = GridBagConstraints.RELATIVE
gridwidth = GridBagConstraints.REMAINDER
gridheight = 2
, weighty = 1.0
gridwidth = GridBagConstraints.REMAINDER
上記の例を実装したサンプル・コードを示します。
import java.awt.*; import java.util.*; import java.applet.Applet; public class GridBagEx1 extends Applet { protected void makebutton(String name, GridBagLayout gridbag, GridBagConstraints c) { Button button = new Button(name); gridbag.setConstraints(button, c); add(button); } public void init() { GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setFont(new Font("SansSerif", Font.PLAIN, 14)); setLayout(gridbag); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; makebutton("Button1", gridbag, c); makebutton("Button2", gridbag, c); makebutton("Button3", gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; //end row makebutton("Button4", gridbag, c); c.weightx = 0.0; //reset to the default makebutton("Button5", gridbag, c); //another row c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row makebutton("Button6", gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; //end row makebutton("Button7", gridbag, c); c.gridwidth = 1; //reset to the default c.gridheight = 2; c.weighty = 1.0; makebutton("Button8", gridbag, c); c.weighty = 0.0; //reset to the default c.gridwidth = GridBagConstraints.REMAINDER; //end row c.gridheight = 1; //reset to the default makebutton("Button9", gridbag, c); makebutton("Button10", gridbag, c); setSize(300, 100); } public static void main(String args[]) { Frame f = new Frame("GridBag Layout Example"); GridBagEx1 ex1 = new GridBagEx1(); ex1.init(); f.add("Center", ex1); f.pack(); f.setSize(f.getPreferredSize()); f.show(); } }
GridBagConstraints
, GridBagLayoutInfo
, ComponentOrientation
, 直列化された形式修飾子と型 | フィールドと説明 |
---|---|
double[] |
columnWeights
このフィールドは、列のウエイトに対するオーバーライドを保持します。
|
int[] |
columnWidths
このフィールドは、列の最小幅に対するオーバーライドを保持します。
|
protected Hashtable<Component,GridBagConstraints> |
comptable
このハッシュ表は、コンポーネントとコンポーネントのグリッド・バッグ制約との関連性を維持します。
|
protected GridBagConstraints |
defaultConstraints
このフィールドには、デフォルト値を含むグリッド・バッグ制約のインスタンスが保持されているため、コンポーネントにグリッド・バッグ制約が関連付けられていない場合、そのコンポーネントには
defaultConstraints のコピーが割り当てられます。 |
protected GridBagLayoutInfo |
layoutInfo
このフィールドは、グリッド・バッグのレイアウト情報を保持します。
|
protected static int |
MAXGRIDSIZE
このフィールドは、配列を予約するためには使用されなくなり、下位互換性のために維持されています。
|
protected static int |
MINSIZE
グリッド・バッグ・レイアウトによって配置できる最小のグリッドです。
|
protected static int |
PREFERREDSIZE
グリッド・バッグ・レイアウトによって配置できるグリッドの推奨サイズです。
|
int[] |
rowHeights
このフィールドは、行の最小の高さに対するオーバーライドを保持します。
|
double[] |
rowWeights
このフィールドは、行のウエイトに対するオーバーライドを保持します。
|
コンストラクタと説明 |
---|
GridBagLayout()
グリッド・バッグ・レイアウト・マネージャを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
void |
addLayoutComponent(Component comp, Object constraints)
指定された
constraints オブジェクトを使用して、指定されたコンポーネントをレイアウトに追加します。 |
void |
addLayoutComponent(String name, Component comp)
このレイアウト・マネージャはコンポーネントごとの文字列を使用しないため、何もしません。
|
protected void |
adjustForGravity(GridBagConstraints constraints, Rectangle r)
x、y、幅、高さフィールドを、制約幾何学的図形およびパッドに応じて正しい値に調整します。
|
protected void |
AdjustForGravity(GridBagConstraints constraints, Rectangle r)
このメソッドは廃止されており、下位互換性のためにのみ提供されています。新しいコードは、かわりに
adjustForGravity を呼び出すようにしてください。 |
protected void |
arrangeGrid(Container parent)
グリッドを配置します。
|
protected void |
ArrangeGrid(Container parent)
このメソッドは廃止されており、下位互換性のためにのみ提供されています。新しいコードは、かわりに
arrangeGrid を呼び出すようにしてください。 |
GridBagConstraints |
getConstraints(Component comp)
指定されたコンポーネントの制約を返します。
|
float |
getLayoutAlignmentX(Container parent)
x軸方向の配置を返します。
|
float |
getLayoutAlignmentY(Container parent)
y軸方向の配置を返します。
|
int[][] |
getLayoutDimensions()
レイアウト・グリッドの列の幅と行の高さを指定します。
|
protected GridBagLayoutInfo |
getLayoutInfo(Container parent, int sizeflag)
管理される子の現在のセットに対する
GridBagLayoutInfo のインスタンスに値を入力します。 |
protected GridBagLayoutInfo |
GetLayoutInfo(Container parent, int sizeflag)
このメソッドは廃止されており、下位互換性のためにのみ提供されています。新しいコードは、かわりに
getLayoutInfo を呼び出すようにしてください。 |
Point |
getLayoutOrigin()
ターゲット・コンテナのグラフィックス座標空間内で、レイアウト領域の原点を指定します。
|
double[][] |
getLayoutWeights()
レイアウト・グリッドの列と行のウエイトを指定します。
|
protected Dimension |
getMinSize(Container parent, GridBagLayoutInfo info)
getLayoutInfo からの情報に基づいて、マスターの最小サイズを計算します。 |
protected Dimension |
GetMinSize(Container parent, GridBagLayoutInfo info)
このメソッドは廃止されており、下位互換性のためにのみ提供されています。新しいコードは、かわりに
getMinSize を呼び出すようにしてください。 |
void |
invalidateLayout(Container target)
レイアウトを無効にします。このとき、レイアウト・マネージャが情報をキャッシュしていればそれを破棄します。
|
void |
layoutContainer(Container parent)
このグリッド・バッグ・レイアウトを使って指定されたコンテナを配置します。
|
Point |
location(int x, int y)
(x, y) によって指定された点がレイアウト・グリッド内のどのセルに含まれているかを判定します。 |
protected GridBagConstraints |
lookupConstraints(Component comp)
指定されたコンポーネントの制約を返します。
|
Dimension |
maximumLayoutSize(Container target)
指定されたターゲット・コンテナにコンポーネントが与えられた場合の、レイアウトの最大サイズを返します。
|
Dimension |
minimumLayoutSize(Container parent)
このグリッド・バッグ・レイアウトを使用して、
parent コンテナの最小サイズを判定します。 |
Dimension |
preferredLayoutSize(Container parent)
このグリッド・バッグ・レイアウトを使用して、
parent コンテナの優先サイズを判定します。 |
void |
removeLayoutComponent(Component comp)
指定されたコンポーネントをこのレイアウトから削除します。
|
void |
setConstraints(Component comp, GridBagConstraints constraints)
このレイアウトの指定されたコンポーネントに対して制約を設定します。
|
String |
toString()
グリッド・バッグ・レイアウトの値の文字列表現を返します。
|
protected static final int MAXGRIDSIZE
protected static final int MINSIZE
protected static final int PREFERREDSIZE
protected Hashtable<Component,GridBagConstraints> comptable
comptable
内のキーはコンポーネントで、値はGridBagConstraints
のインスタンスです。GridBagConstraints
protected GridBagConstraints defaultConstraints
defaultConstraints
のコピーが割り当てられます。protected GridBagLayoutInfo layoutInfo
layoutInfo
がnull
の場合は、グリッド・バッグにコンポーネントがないか、またはコンポーネントがあってもそれがまだ検査を受けていないことを意味します。public int[] columnWidths
null
ではない場合、すべての最小列幅が計算されたあとで、その値がグリッド・バッグに適用されます。columnWidthsに列数より多くの要素がある場合、columnWidthの要素数に合わせるためにグリッド・バッグに列が追加されます。getLayoutDimensions()
public int[] rowHeights
null
ではない場合、すべての最小の行の高さが計算されたあとで、その値がグリッド・バッグに適用されます。rowHeights
に行数より多くの要素がある場合、rowHeights
の要素数に合わせるために、グリッド・バッグに行が追加されます。getLayoutDimensions()
public double[] columnWeights
null
ではない場合、すべての列のウエイトが計算されたあとで、その値がグリッド・バッグに適用されます。columnWeights[i]
> 列iのウエイトの場合は、列iにcolumnWeights[i]
のウエイトが割り当てられます。columnWeights
に列数より多くの要素がある場合、超過した要素は無視され、列の作成は行われません。public double[] rowWeights
null
ではない場合、すべての行のウエイトが計算されたあとで、その値がグリッド・バッグに適用されます。rowWeights[i]
> 行iのウエイトの場合は、行iにrowWeights[i]
のウエイトが割り当てられます。rowWeights
に行数より多くの要素がある場合、超過した要素は無視され、行の作成は行われません。public void setConstraints(Component comp, GridBagConstraints constraints)
comp
- 変更されるコンポーネントconstraints
- 適用される制約public GridBagConstraints getConstraints(Component comp)
GridBagConstraints
オブジェクトのコピーが返されます。comp
- 照会されるコンポーネントprotected GridBagConstraints lookupConstraints(Component comp)
GridBagConstraints
オブジェクトです。
comp
がGridBagLayout
にない場合、一連のデフォルトのGridBagConstraints
が返されます。null
のcomp
値は無効で、null
が返されます。
comp
- 照会されるコンポーネントpublic Point getLayoutOrigin()
ComponentOrientation
の値とは関係なく、レイアウト領域の左上隅のピクセル座標を表します。これは、セル座標(0,0)によって指定されるグリッドの原点とは異なります。ほとんどのアプリケーションはこのメソッドを直接には呼び出しません。ComponentOrientation
public int[][] getLayoutDimensions()
ほとんどのアプリケーションはこのメソッドを直接には呼び出しません。
public double[][] getLayoutWeights()
ほとんどのアプリケーションはこのメソッドを直接には呼び出しません。
public Point location(int x, int y)
(x, y)
によって指定された点がレイアウト・グリッド内のどのセルに含まれているかを判定します。各セルは列インデックス(0から列数 - 1)と行インデックス(0から行数 - 1)で識別されます。
点(x, y)
がグリッドの外側にある場合、次のルールが適用されます。x
が左から右方向のコンテナのレイアウトの左にある場合、または右から左方向のコンテナのレイアウトの右にある場合、列インデックスはゼロが返されます。x
が左から右方向のコンテナのレイアウトの右にある場合、または右から左方向のコンテナのレイアウトの左にある場合、列インデックスは列数が返されます。y
がレイアウトの上にある場合は、行インデックスはゼロが返され、y
がレイアウトの下にある場合は、行数が返されます。コンテナの方向は、そのComponentOrientation
プロパティによって指定されます。
x
- 点のx座標y
- 点のy座標ComponentOrientation
public void addLayoutComponent(String name, Component comp)
addLayoutComponent
、インタフェース: LayoutManager
name
- コンポーネントに関連付けられる文字列comp
- 追加されるコンポーネントpublic void addLayoutComponent(Component comp, Object constraints)
constraints
オブジェクトを使用して、指定されたコンポーネントをレイアウトに追加します。制約は可変であり、そのためキャッシュ時に複製されることに注意します。addLayoutComponent
、インタフェース: LayoutManager2
comp
- 追加されるコンポーネントconstraints
- コンポーネントをレイアウトに追加する方法を指定するオブジェクトIllegalArgumentException
- constraints
がGridBagConstraint
ではない場合public void removeLayoutComponent(Component comp)
ほとんどのアプリケーションはこのメソッドを直接には呼び出しません。
removeLayoutComponent
、インタフェース: LayoutManager
comp
- 削除されるコンポーネント。Container.remove(java.awt.Component)
, Container.removeAll()
public Dimension preferredLayoutSize(Container parent)
parent
コンテナの優先サイズを判定します。
ほとんどのアプリケーションはこのメソッドを直接には呼び出しません。
preferredLayoutSize
、インタフェース: LayoutManager
parent
- レイアウトが行われるコンテナparent
コンテナの推奨サイズContainer.getPreferredSize()
public Dimension minimumLayoutSize(Container parent)
parent
コンテナの最小サイズを判定します。
ほとんどのアプリケーションはこのメソッドを直接には呼び出しません。
minimumLayoutSize
、インタフェース: LayoutManager
parent
- レイアウトが行われるコンテナparent
コンテナの最小サイズContainer.doLayout()
public Dimension maximumLayoutSize(Container target)
maximumLayoutSize
、インタフェース: LayoutManager2
target
- 配置する必要があるコンテナContainer
, minimumLayoutSize(Container)
, preferredLayoutSize(Container)
public float getLayoutAlignmentX(Container parent)
getLayoutAlignmentX
、インタフェース: LayoutManager2
0.5f
public float getLayoutAlignmentY(Container parent)
getLayoutAlignmentY
、インタフェース: LayoutManager2
0.5f
public void invalidateLayout(Container target)
invalidateLayout
、インタフェース: LayoutManager2
public void layoutContainer(Container parent)
GridBagLayout
オブジェクトの制約を満たすために、指定されたコンテナ内のコンポーネントの形状を変更します。
ほとんどのアプリケーションはこのメソッドを直接には呼び出しません。
layoutContainer
、インタフェース: LayoutManager
parent
- レイアウトが行われるコンテナContainer
, Container.doLayout()
public String toString()
protected GridBagLayoutInfo getLayoutInfo(Container parent, int sizeflag)
GridBagLayoutInfo
のインスタンスに値を入力します。このインスタンスには、子のセットを通じて、次の3つの段階の実行が必要です。
このメソッドは、GridBagLayout
が内部的に使用するだけにしてください。
parent
- レイアウト・コンテナsizeflag
- PREFERREDSIZE
またはMINSIZE
GridBagLayoutInfo
protected GridBagLayoutInfo GetLayoutInfo(Container parent, int sizeflag)
getLayoutInfo
を呼び出すようにしてください。このメソッドはgetLayoutInfo
と同じです。パラメータと戻り値の詳細は、getLayoutInfo
を参照してください。protected void adjustForGravity(GridBagConstraints constraints, Rectangle r)
GridBagLayout
が内部的に使用するだけにしてください。constraints
- 適用される制約r
- 調整するRectangle
protected void AdjustForGravity(GridBagConstraints constraints, Rectangle r)
adjustForGravity
を呼び出すようにしてください。このメソッドはadjustForGravity
と同じです。パラメータの詳細はadjustForGravity
を参照してください。protected Dimension getMinSize(Container parent, GridBagLayoutInfo info)
getLayoutInfo
からの情報に基づいて、マスターの最小サイズを計算します。このメソッドは、GridBagLayout
が内部的に使用するだけにしてください。parent
- レイアウト・コンテナinfo
- この親のレイアウト情報Dimension
オブジェクトprotected Dimension GetMinSize(Container parent, GridBagLayoutInfo info)
getMinSize
を呼び出すようにしてください。このメソッドはgetMinSize
と同じです。パラメータと戻り値の詳細は、getMinSize
を参照してください。protected void arrangeGrid(Container parent)
GridBagLayout
が内部的に使用するだけにしてください。parent
- レイアウト・コンテナprotected void ArrangeGrid(Container parent)
arrangeGrid
を呼び出すようにしてください。このメソッドはarrangeGrid
と同じです。パラメータの詳細はarrangeGrid
を参照してください。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.