Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのLayoutManager(レイアウトマネージャー)とは?6つの種類と使い方を解説

LayoutManager(レイアウトマネージャー)は、GUIフォーム上に視覚コンポーネントをどのように配置するかを制御するための仕組みです。コンテナ内における各コンポーネントのサイズと位置を自動的に決定することで、ウィンドウサイズが変わっても整然としたユーザーインターフェースを維持できます。

LayoutManagerの種類

Javaには、標準で以下の6種類のレイアウトマネージャーが用意されています。

  • FlowLayout(フローレイアウト):コンポーネントをページ上の文章のように配置します。上段から左から右へ、上から下へと順に詰めていき、追加された順序どおりに並びます。最初のコンポーネントは左上に表示され、コンテナの幅が足りなくなると次の行へ折り返されます。コンポーネント間の縦横の間隔は調整可能で、左寄せ・中央寄せ・右寄せのいずれかの配置も指定できます。
  • BorderLayout(ボーダーレイアウト):コンポーネントをコンテナの端または中央に配置します。利用できるのは上(NORTH)・下(SOUTH)・左(WEST)・右(EAST)・中央(CENTER)の5領域です。上下に追加されたコンポーネントは推奨の高さを保ちますが、幅はコンテナ全体に広がります。左右に追加されたコンポーネントは推奨の幅を保ちますが、高さは残りの領域いっぱいになります。中央に追加されたコンポーネントは推奨サイズを無視し、残りの領域すべてを占有します。
  • GridLayout(グリッドレイアウト):すべてのコンポーネントを同じ大きさのセルからなるグリッド状に配置します。コンポーネントは左から右へ、上から下への順に追加され、1つのセルには1つのコンポーネントだけを配置できます。コンテナのサイズが変更されると、すべてのセルも自動的にリサイズされます。セルへの配置順序は、コンポーネントが追加された順序によって決まります。
  • GridBagLayout(グリッドバッグレイアウト):最も柔軟性の高いレイアウトです。グリッド状のセルにコンポーネントを配置しながら、コンテナのリサイズ時にもオブジェクトのアスペクト比を維持できます。各セルのサイズは異なっていてもよく、コンポーネント間には一定の水平・垂直ギャップが設定されます。また、列や行ごとのデフォルトの配置(アライメント)も指定可能です。
  • BoxLayout(ボックスレイアウト):複数のコンポーネントを垂直方向または水平方向のどちらか一方に並べます(両方は不可)。左から右へ、または上から下への順で配置されます。水平方向に並べた場合、すべてのコンポーネントの高さは最も高いものに揃えられます。垂直方向に並べた場合、すべてのコンポーネントの幅は最も幅の広いものに揃えられます。
  • CardLayout(カードレイアウト):同じサイズの2つ以上のコンポーネントを重ねて管理します。コンポーネントはカードのデッキ(束)のように積まれ、常に一番上のカードだけが表示されます。最初に追加されたコンポーネントがデッキの先頭に置かれます。上下左右のデフォルトの余白はゼロで、カードは水平方向にも垂直方向にも表示できます。

サンプルコード

以下は、JFrameにBorderLayoutを設定し、その中でFlowLayoutとGridLayoutを組み合わせた実装例です。パネルごとに異なるレイアウトマネージャーを設定することで、複雑な画面構成も柔軟に作成できます。

import java.awt.*;
import javax.swing.*;

public class LayoutManagerTest extends JFrame {
    JPanel flowLayoutPanel1, flowLayoutPanel2, gridLayoutPanel1, gridLayoutPanel2, gridLayoutPanel3;
    JButton one, two, three, four, five, six;
    JLabel bottom, lbl1, lbl2, lbl3;

    public LayoutManagerTest() {
        setTitle("LayoutManager Test");
        setLayout(new BorderLayout()); // JFrameにBorderLayoutを設定

        flowLayoutPanel1 = new JPanel();
        one = new JButton("One");
        two = new JButton("Two");
        three = new JButton("Three");
        flowLayoutPanel1.setLayout(new FlowLayout(FlowLayout.CENTER)); // FlowLayoutを設定
        flowLayoutPanel1.add(one);
        flowLayoutPanel1.add(two);
        flowLayoutPanel1.add(three);

        flowLayoutPanel2 = new JPanel();
        bottom = new JLabel("This is South");
        flowLayoutPanel2.setLayout(new FlowLayout(FlowLayout.CENTER)); // FlowLayoutを設定
        flowLayoutPanel2.add(bottom);

        gridLayoutPanel1 = new JPanel();
        gridLayoutPanel2 = new JPanel();
        gridLayoutPanel3 = new JPanel();
        lbl1 = new JLabel("One");
        lbl2 = new JLabel("Two");
        lbl3 = new JLabel("Three");
        four = new JButton("Four");
        five = new JButton("Five");
        six = new JButton("Six");

        gridLayoutPanel2.setLayout(new GridLayout(1, 3, 5, 5)); // GridLayoutを設定
        gridLayoutPanel2.add(lbl1);
        gridLayoutPanel2.add(lbl2);
        gridLayoutPanel2.add(lbl3);

        gridLayoutPanel3.setLayout(new GridLayout(3, 1, 5, 5)); // GridLayoutを設定
        gridLayoutPanel3.add(four);
        gridLayoutPanel3.add(five);
        gridLayoutPanel3.add(six);

        gridLayoutPanel1.setLayout(new GridLayout(2, 1)); // GridLayoutを設定
        gridLayoutPanel1.add(gridLayoutPanel2);
        gridLayoutPanel1.add(gridLayoutPanel3);

        add(flowLayoutPanel1, BorderLayout.NORTH);
        add(flowLayoutPanel2, BorderLayout.SOUTH);
        add(gridLayoutPanel1, BorderLayout.CENTER);

        setSize(400, 325);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String args[]) {
        new LayoutManagerTest();
    }
}

実行結果

このプログラムを実行すると、上部にFlowLayoutで中央寄せされた3つのボタン、下部に「This is South」ラベル、中央にGridLayoutで構成されたラベルとボタンのパネルが表示されます。ウィンドウのサイズを変更すると、各レイアウトマネージャーの特徴に応じてコンポーネントが自動的に再配置されることが確認できます。

  1. JavaとJavaScriptの違いとは?歴史・技術・使い分けを徹底解説

    ウェブ開発者のジェレミー・キースは2009年、「JavaとJavaScriptの関係は、ハムとハムスターの関係のようなものだ」と語りました。この比喩がどれほど正確かは議論の余地がありますが、その本質は的確です。共通する言語的ルーツを持つにもかかわらず、JavaとJavaScriptはまったく異なる2つのプログラミング言語なのです。年月とともに両者の重なりも多少増えましたが、今なおJavaScriptはウェブサイトにインタラクティブ性をもたらすフロントエンド言語の主流であり続け、Javaはサーバーサイドやアプリケーション開発で人気を保っています。開発者を採用したい方、プログラミングを学びたい方

  2. OLEDディスプレイとは?仕組みと種類(AMOLED・PMOLED)を徹底解説

    デジタルディスプレイ技術はここ数十年で劇的に進化してきました。各メーカーは、経済的で耐久性が高く、かつ優れた視聴体験を提供できるスクリーンの開発にしのぎを削っています。身の回りを見渡してみると、私たちが日常的に使う電子機器の多くは、LCD・LED・CRTといったタイプの画面を採用しています。しかし、これらの技術には「消費電力が大きい」あるいは「表示品質が十分ではない」という課題がありました。 こうした課題を克服するために生まれたのが、低消費電力でありながら高い輝度を実現できる新型ディスプレイ「OLED」です。本記事では、OLEDの基本構造から種類、メリットまでをわかりやすく解説します。 OLE