Java AWTレイアウト

Java AWTレイアウト

java.awtライブラリは、5つの基本的なレイアウトを提供します。 各レイアウトには独自の意味があり、それらはすべて完全に異なります。 この記事では、フレームまたはパネルにレイアウトを適用する方法について説明し、各レイアウトについて簡単に説明します。

java.awtライブラリで使用できる5つのレイアウトは次のとおりです。

  1. ボーダーレイアウト

  2. グリッドレイアウト

  3. GridBagLayout

  4. カードのレイアウト

  5. フローレイアウト

1. ボーダーレイアウト

BorderLayoutは、方向の観点からコンポーネントを編成するレイアウトです。 ボーダーレイアウトは、フレームまたはパネルを5つのセクション(北、南、東、西、中央)に分割します。 追加の引数を渡すことにより、各コンポーネントを特定の方向に配置できます。

BorderLayoutExample.java

package com.example;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Label;
import javax.swing.JFrame;

public class BorderLayoutExample extends JFrame {

    public static void main(String[] args) {
        BorderLayoutExample a = new BorderLayoutExample();
    }

    public BorderLayoutExample() {

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        BorderLayout b = new BorderLayout();
        setTitle("Border Layout");

        setSize(300, 300);
        add(new Button("North"), BorderLayout.NORTH);
        add(new Button("South"), BorderLayout.SOUTH);
        add(new Button("East"), BorderLayout.EAST);
        add(new Button("West"), BorderLayout.WEST);
        add(new Button("Center"), BorderLayout.CENTER);

    }
}

出力

awt-borderlayout

2. グリッドレイアウト

GridLayoutは、コンポーネントを配置するためのより組織化された方法です。 フレームまたはパネルを、均等に分布したセルを含むグリッドの形で分割します。 各コンポーネントは特定のセルに追加されます。 コンポーネントの配置順序は、フレームまたはパネルに追加される順序に直接依存します。 次の画像は、2列3行のGridLayoutベースのフレームを示しています。

コンストラクターGridLayout(int row,int cols)の引数によって、グリッドサイズが決まります。

GridLayoutExample.java

package com.example;

import java.awt.Button;
import java.awt.GridLayout;
import javax.swing.JFrame;

public class GridLayoutExample extends JFrame {

    public static void main(String[] args) {
        GridLayoutExample a = new GridLayoutExample();
    }

    public GridLayoutExample() {

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        GridLayout g = new GridLayout(3, 2);
        setLayout(g);
        setTitle("Grid Layout");
        setSize(300, 300);
        add(new Button("Button 1"));
        add(new Button("Button 2"));
        add(new Button("Button 3"));
        add(new Button("Button 4"));
        add(new Button("Button 5"));
        add(new Button("Button 6"));

    }

}

出力

awt-gridlayout

3. GridBagLayout

GridBagLayoutは最も柔軟なレイアウトであり、コンポーネントを配置するための整理された柔軟な方法を提供します。 開発者は、コンポーネントをグリッド内で正確に選択できる柔軟性を得ることができます。グリッド内では、行の間隔と列の間隔、水平方向と垂直方向のギャップを選択できます。 次の画像はGridBagLayoutを示しています。 一度に2行にまたがるボタン5が含まれています。

GridBagLayoutExample.java

package com.example;

import java.awt.Button;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;

public class GridBagLayoutExample extends JFrame {

    public static void main(String[] args) {
        GridBagLayoutExample a = new GridBagLayoutExample();
    }

    public GridBagLayoutExample() {
        setSize(300, 300);
        setPreferredSize(getSize());
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        GridBagLayout g = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();
        setLayout(g);
        setTitle("GridBag Layout");

        GridBagLayout layout = new GridBagLayout();

        this.setLayout(layout);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 0;
        this.add(new Button("Button 1"), gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        this.add(new Button("Button 2"), gbc);

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.ipady = 20;
        gbc.gridx = 0;
        gbc.gridy = 1;
        this.add(new Button("Button 3"), gbc);

        gbc.gridx = 1;
        gbc.gridy = 1;
        this.add(new Button("Button 4"), gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridwidth = 2;
        this.add(new Button("Button 5"), gbc);

    }
}

出力

awt-gridbaglayout

4. カードのレイアウト

これはめったに使用されず、コンポーネントを上下に積み重ねるために利用されるレイアウトです。 CardLayoutを使用すると、コンポーネントを相互に重ね合わせて、要件に応じて任意のコンポーネントを前面に切り替えることができます。 画像を使用してカードレイアウトを記述することは意味がありません。 したがって、小さな例を使って理解しましょう。 以下のコードを見てください。

mychoice.addItemListener(new ItemListener() {
         public void itemStateChanged(ItemEvent e) {
            CardLayout cardLayout = (CardLayout)(e.getTarget().getParent().getLayout());
            cardLayout.show(panel, (String)e.getItem());
         }
      });

上記のコードは、コンボボックスを持つイベントリスナーとして関連付けられています。 コンボの値の変化により、コンポーネントが表示されます。 カードレイアウトを作成するには、以下のコードを使用できます

CardLayoutExample.java

package com.example;

import java.awt.Button;
import java.awt.CardLayout;
import javax.swing.JFrame;

public class CardLayoutExample extends JFrame {

    public static void main(String[] args) {
        CardLayoutExample a = new CardLayoutExample();
    }

    public CardLayoutExample() {

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        CardLayout g = new CardLayout();
        setLayout(g);
        setTitle("Card Layout");

        setSize(300, 300);
        add(new Button("Button 1"));
        add(new Button("Button 2"));
        add(new Button("Button 3"));
        add(new Button("Button 4"));
        add(new Button("Button 5"));
        add(new Button("Button 6"));

    }
}

出力

awt-cardlayout

5. フローレイアウト

名前が示すように、FlowLayoutは、コンポーネントが流れて、表示されている部分の終わりに到達できるようにするレイアウトです。 FlowLayoutは基本的に、より応答性の高いUIを開発し、コンポーネントを自由に流れるように保つのに役立ちます。 以下の画像は、6つのコンポーネントを持つ実際のフローレイアウトを示しています。

これはフレームまたはパネルのデフォルトのレイアウトであるため、レイアウトを明示的に適用しなくても機能します。

FlowLayoutExample.java

package com.example;

import java.awt.Button;
import java.awt.FlowLayout;
import javax.swing.JFrame;

public class FlowLayoutExample extends JFrame {

    public static void main(String[] args) {
        FlowLayoutExample a = new FlowLayoutExample();
    }

    public FlowLayoutExample() {

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        FlowLayout g = new FlowLayout();
        setLayout(g);
        setTitle("Flow Layout");
        setSize(300, 300);
        add(new Button("Button 1"));
        add(new Button("Button 2"));
        add(new Button("Button 3"));
        add(new Button("Button 4"));
        add(new Button("Button 5"));
        add(new Button("Button 6"));

    }
}

出力

awt-flowlayout

結論

この記事では、利用可能なAWTレイアウトについて説明しました。 議論は非常に簡単に行われました。 したがって、参考文献には、さらに学習するのに役立つリンクがいくつかあります。