Java AWT Layouts

Java AWT Layouts

Библиотекаjava.awt предоставляет 5 основных макетов. Каждый макет имеет свое значение, и все они совершенно разные. Здесь, в этой статье, мы обсудим, как применить любой макет к фрейму или панели, а также вкратце обсудим каждый макет.

В библиотекеjava.awt доступны 5 макетов:

  1. Макет границы

  2. Макет сетки

  3. GridBag Layout

  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. Макет сетки

AGridLayout - это более организованный способ размещения компонентов. Он делит рамку или панель в виде сетки, содержащей равномерно распределенные ячейки. Каждый компонент добавляется в определенную ячейку. Порядок размещения компонентов напрямую зависит от порядка их добавления в рамку или панель. На изображении ниже показан фрейм с 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. GridBag Layout

GridBagLayout - это наиболее гибкий макет, который обеспечивает организованный, но гибкий способ размещения компонентов. Он предоставляет разработчикам возможность выбора точного местоположения компонента в сетке, его диапазона строк и столбцов, а также горизонтального и вертикального промежутка. На изображении ниже показанGridBagLayout. Он содержит кнопку 5, которая занимает 2 строки одновременно.

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 - это макет, который позволяет компонентам перемещаться к видимой части и достигать ее конца. AFlowLayout в основном помогает разработать более отзывчивый пользовательский интерфейс и сохранить плавность компонентов. На рисунке ниже показан фактический макет потока с 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. Обсуждение было сделано очень кратко. Следовательно, в ссылках есть некоторые ссылки, которые могут помочь вам узнать больше.