Java AWTレイアウト

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

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

  1. 罫線レイアウト

  2. グリッドレイアウト

  3. GridBagLayout

  4. カードレイアウト

  5. フローレイアウト

1.ボーダーレイアウト

「BorderLayout」は、コンポーネントを方向に関して整理するレイアウトです。境界線レイアウトは、フレームまたはパネルをNorth、South、East、WestおよびCenterの5つのセクションに分割します。各コンポーネントは、追加の引数を渡すことで特定の方向に配置できます。

BorderLayoutExample.java

package com.techfou;

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.techfou;

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. GridBagのレイアウト

`GridBagLayout`は、構成が整然とした柔軟な方法でコンポーネントを配置する最も柔軟なレイアウトです。グリッド内のコンポーネントの正確な位置を選択する柔軟性を開発者に提供します。これは、行スパンおよび列スパン、水平および垂直ギャップです。下の画像は `GridBagLayout`を示しています。これは、一度に2行にまたがるボタン5を含む。

GridBagLayoutExample.java

package com.mkyong;

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.mkyong;

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.mkyong;

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レイアウトについて説明しました。議論は非常に簡単に行われました。したがって、あなたがより多くを学ぶのを助けるかもしれない参照に提供されるいくつかのリンクがあります。