Java Swing布局教程

Java Swing是Java编程语言的一部分,是一种用于构建GUI(图形用户界面)的框架。在Java Swing中,布局管理器是一种用于定义和控制组件在容器中的位置和大小的工具。本教程将介绍Java Swing中的常见布局管理器,并提供相应的代码示例。

1. BorderLayout(边界布局)

BorderLayout是Java Swing中最常用的布局管理器之一。它将容器分为5个区域:北、南、东、西和中。每个区域只能包含一个组件,且组件会根据其区域自动调整大小。

下面是一个使用BorderLayout的示例代码:

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

public class BorderLayoutExample extends JFrame {
    public BorderLayoutExample() {
        setTitle("BorderLayout Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

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

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new BorderLayoutExample();
            }
        });
    }
}

运行以上代码,将会显示一个包含5个按钮的窗口。这些按钮将按照其所在区域的位置进行布局。

2. FlowLayout(流式布局)

FlowLayout是另一个常用的布局管理器,它按照组件添加的顺序自动进行布局。如果组件的宽度超过容器的宽度,FlowLayout会自动换行。

下面是一个使用FlowLayout的示例代码:

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

public class FlowLayoutExample extends JFrame {
    public FlowLayoutExample() {
        setTitle("FlowLayout Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());

        for (int i = 1; i <= 10; i++) {
            add(new JButton("Button " + i));
        }

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new FlowLayoutExample();
            }
        });
    }
}

运行以上代码,将会显示一个包含10个按钮的窗口。当窗口宽度不足以容纳所有按钮时,按钮会自动换行。

3. GridLayout(网格布局)

GridLayout将容器分为等大小的网格,并在每个网格中放置一个组件。它有两个参数,分别表示网格的行数和列数。

下面是一个使用GridLayout的示例代码:

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

public class GridLayoutExample extends JFrame {
    public GridLayoutExample() {
        setTitle("GridLayout Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(3, 3));

        for (int i = 1; i <= 9; i++) {
            add(new JButton("Button " + i));
        }

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new GridLayoutExample();
            }
        });
    }
}

运行以上代码,将会显示一个3x3的网格,每个网格中都有一个按钮。

4. CardLayout(卡片布局)

CardLayout允许在同一个容器中堆叠多个组件,只显示其中一个组件。通过切换显示的组件,可以创建多个页面或选项卡。

下面是一个使用CardLayout的示例代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CardLayoutExample extends JFrame {
    private JPanel cards;
    private CardLayout cardLayout;

    public CardLayoutExample() {
        setTitle("CardLayout Example");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton button1 = new JButton("Card 1");
        JButton button2 = new JButton("Card 2");
        JButton button3 = new JButton("Card 3");

        button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                cardLayout.show(cards, "Card 1");
            }
        });

        button2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                cardLayout.show(cards, "Card 2");
            }
        });

        button3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                cardLayout.show(cards, "Card 3