コンポーネント追加時の領域の分割方法について
GridLayoutでは行と列の数を指定しますが実際には列に指定した値は行数に「0」を指定した時以外は意味がありません。重要となるのは行数でありまず行数で領域を分割します。そして追加するコンポーネントの数に合わせて列数を順に増やしていくという動作をします。
実際の例を見ながら確認していきましょう。
行数に「0」以外を指定した場合
例として2行2列を指定したGridLayoutにコンポーネントを追加する場合を見ていきます。
JPanel p = new JPanel(); p.setLayout(new GridLayout(2, 2));
コンポーネントを1つ追加します。
まず行数に指定した「2」と言う値に従って領域全体を2分割します。GridLayoutでは例え追加するコンポーネントが1つであっても行に指定した値で必ず縦方向は分割されます。逆に列数に指定した値は実際には意味を持ちません。
ではコンポーネントをさらに1つ追加します。
コンポーネントを2つ追加した場合は行数で分割された領域に入りきりますので2つのコンポーネントは上から順に配置されます。
ではコンポーネントをさらに1つ追加します。
行数で指定した数で分割しただけではコンポーネントが入りきらなくなった場合に列が分割されます。この時コンポーネントはまず最初の行の左から右へ向かって配置されていきます。そして最初の行に入りきらなくなったら次の行へ移ります。
ではコンポーネントをさらに4つ追加します。
コンポーネントの数が増えてくればそれに伴って列数が自動的に追加されて分割されていきます。逆に行数は指定した値から変わることはありません。このように列数は指定したあったとしてもコンポーネントの数に従って自動的に調整されてしまいます。
行数に「0」を指定した場合
先ほどの例では列数に数を指定しても意味が無いといいましたが、行数に「0」が指定されている場合には列数が意味を持ってきます。では例として0行2列を指定したGridLayoutにコンポーネントを追加する場合を見ていきます。
JPanel p = new JPanel(); p.setLayout(new GridLayout(0, 2));
コンポーネントを1つ追加します。
まず行数に「0」が指定されている場合には列数に指定した「2」と言う値に従って領域全体を2分割します。GridLayoutでは行数が「0」の場合だけ列に指定した値で必ず横方向は分割されます。
ではコンポーネントをさらに1つ追加します。
コンポーネントを2つ追加した場合は列数で分割された領域に入りきりますので2つのコンポーネントは左から順に配置されます。
ではコンポーネントをさらに1つ追加します。
列数で指定した数で分割しただけではコンポーネントが入りきらなくなった場合に行が分割されます。この時コンポーネントはまず最初の行の左から右へ向かって配置されていきます。そして最初の行に入りきらなくなったら次の行へ移ります。
ではコンポーネントをさらに4つ追加します。
コンポーネントの数が増えてくればそれに伴って行数が自動的に追加されて分割されていきます。逆に列数は指定した値から変わることはありません。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。