GridBagConstraintsクラスを使ってコンポーネントを配置する

広告

GridBagLayoutクラスをレイアウトマネージャーとして設定したコンテナに対してコンポーネントを配置していく方法を確認します。

コンポーネントを配置するには今までのレイアウトマネージャーと同じく「add」メソッドを使ってコンテナに対してコンポーネントを追加しますが、追加するコンポーネントに対してどのように配置されるのかを事前に設定しておく必要があります。コンポーネントに配置方法に関する情報を設定するにはGridBagLayoutクラスで用意されている「setConstraints」メソッドを使います。

このレイアウトの指定されたコンポーネントに対して制約を設定します。

パラメータ:
  comp - 変更されるコンポーネント
  constraints - 適用される制約

1番目の引数に配置したいコンポーネントを指定します。そして2番目の引数にどのように配置するのかを表す制約と呼ばれるものを指定します。制約というのはコンポーネントを配置する位置やサイズを拡張するのかどうかを指定するものです。

制約を設定するにはGridBagConstraintsクラスのオブジェクトを作成して指定しますのでまずGridBagConstraintsクラスについて確認しておきましょう。

GridBagConstraintsクラス

GridBagLayoutクラスの定義を確認します。クラス図は次のようになっています。

java.lang.Object
  java.awt.GridBagConstraints

public class GridBagConstraints
extends Object
implements Cloneable, Serializable

GridBagConstraintsクラスのコンストラクタ

GridBagConstraintsクラスをを利用するにはコンストラクタを使ってGridBagConstraintsクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。

コンストラクタ
GridBagConstraints()
すべてのフィールドをデフォルト値に設定して GridBagConstraint オブジェクトを作成します。
GridBagConstraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady)
すべてのフィールドを渡された引数に設定して GridBagConstraints オブジェクトを作成します。

コンストラクタは2つ用意されています。2つ目のコンストラクタでは非常に多くの引数が用意されていますが、引数の数だけGridBagConstraintsクラスのオブジェクトには設定を行えるようになっています。

まず1番目のコンストラクタを確認してみます。

すべてのフィールドをデフォルト値に設定して GridBagConstraint オブジェク
トを作成します。

全ての設定項目に対してデフォルトの値を使いGridBagConstraintクラスのオブジェクトを作成します。通常はこのコンストラクタを使ってオブジェクトを作成してから必要な項目についてだけ設定を別途行うようにします。

では2番目のコンストラクタを確認しどのような設定項目が用意されているのかを確認してみます。

すべてのフィールドを渡された引数に設定して GridBagConstraints オブジェ
クトを作成します。 注:このコンストラクタを使用するとソースコードが読み
にくくなるので、このコンストラクタは自動ソースコード生成ツールでのみ使
用してください。

パラメータ:
  gridx - 初期 gridx 値
  gridy - 初期 gridy 値
  gridwidth - 初期 gridwidth 値
  gridheight - 初期 gridheight 値
  weightx - 初期 weightx 値
  weighty - 初期 weighty 値
  anchor - 初期 anchor 値
  fill - 初期 fill 値
  insets - 初期 insets 値
  ipadx - 初期 ipadx 値
  ipady - 初期 ipady 値

大きく分類すると設定項目は「gridx, gridy, gridwidth, gridheight」「weightx, weighty」「anchor」「fill」「insets」「ipadx, ipady」の6つの項目に分けられます。先ほども記述したとおり、こちらのコンストラクタを使って全ての項目を一度に設定してオブジェクトを作成することはあまりありません。

実際に設定を行うには各設定項目に対応したフィールドが用意されていますのでフィールドに値を設定することで行います。

フィールド名設定内容
gridxコンポーネントの表示領域のリーディングエッジを含むセルを指定します。
gridyコンポーネントの表示領域の上部にセルを指定します。
gridwidthコンポーネントの表示領域の 1 行のセル数を指定します。
gridheightコンポーネントの表示領域の 1 列のセル数を指定します。
weightx余分の水平スペースを分配する方法を指定します。
weighty垂直の余分なスペースを分配する方法を指定します。
anchorこのフィールドはコンポーネントがその表示領域より小さい場合に使用されます。
fillコンポーネントの表示領域がコンポーネントの必須サイズよりも大きいときに使用されます。
insetsコンポーネントの外側のパディング、つまりコンポーネントとその表示領域の端までの領域の最小値を指定します。
ipadxコンポーネントの内側のパディング、つまりコンポーネントの最小幅に追加する領域の値を指定します。
ipadyコンポーネントの内側のパディング、つまりコンポーネントの最小の高さに追加する領域の値を指定します。

実際の使い方は次のようになります。

JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());

JButton button = new JButton("button");

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
layout.setConstraints(button, gbc);

p.add(button);

では次のページ以降でそれぞれのフィールドに関する解説と利用方法を確認します。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。