📜  SWING-容器(1)

📅  最后修改于: 2023-12-03 15:35:13.182000             🧑  作者: Mango

Swing 容器

Swing 是一个用于开发图形用户界面 (GUI) 应用程序的 Java 框架。Swing 提供了丰富的 GUI 组件,如按钮、文本框、下拉框、表格等,并且可以通过组合这些组件来创建复杂的 GUI。

Swing 中的组件最基本的容器是 JComponent 类。除此之外,Swing 还提供了其他容器来帮助程序员组合和管理界面元素。本文将介绍 Swing 中的容器。

JFrame

JFrame 是最基本的顶层容器。它代表包含一个标题栏和一个内容区域的窗口。程序员可以向其添加各种组件,如按钮、标签和文本框等。下面是创建并设置 JFrame 的示例代码:

import javax.swing.*;

public class MyFrame extends JFrame {
    public MyFrame() {
        super("My Frame");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 添加组件
        JLabel label = new JLabel("Hello, world!");
        getContentPane().add(label);
    }

    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
        frame.setVisible(true);
    }
}

这段代码创建了一个带有标题 “My Frame” 的 JFrame,并设置了其大小为 400x300。程序在关闭窗口时将退出程序。在 MyFrame 构造函数中添加了一个 JLabel 组件,程序将在窗口中显示文本 “Hello, world!”

JPanel

JPanel 是一个具有流布局的容器,可以用来组合和管理多个组件。JPanel 可以作为容器添加到其他容器中,也可以被其他容器添加到其中。下面是创建并设置 JPanel 的示例代码:

import javax.swing.*;

public class MyPanel extends JPanel {
    public MyPanel() {
        // 添加组件
        JLabel label1 = new JLabel("Name:");
        JTextField textField1 = new JTextField(10);

        JLabel label2 = new JLabel("Age:");
        JTextField textField2 = new JTextField(2);

        add(label1);
        add(textField1);
        add(label2);
        add(textField2);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("My Frame");
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyPanel panel = new MyPanel();
        frame.getContentPane().add(panel);

        frame.setVisible(true);
    }
}

这段代码创建了一个带有流布局的 JPanel,将两个 JLabel 和 JTextField 组件添加进来。在主函数中,创建了一个 JFrame 并向其添加 MyPanel 容器,最终将 JFrame 显示出来。

JScrollPane

JScrollPane 是一个带有滚动条的容器,用于包含大量数据的组件,如 JTable 和 JList 等。如果组件的大小超出了 JScrollPane 的可见区域,那么就会出现滚动条。下面是创建并设置 JScrollPane 的示例代码:

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

public class MyScrollPane extends JPanel {
    public MyScrollPane() {
        setLayout(new BorderLayout());

        // 创建大量数据的组件
        JTextField textField = new JTextField();
        for (int i = 0; i < 100; i++) {
            textField.setText(textField.getText() + "Line " + i + "\n");
        }

        JScrollPane scrollPane = new JScrollPane(textField);
        add(scrollPane, BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("My Frame");
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyScrollPane panel = new MyScrollPane();
        frame.getContentPane().add(panel);

        frame.setVisible(true);
    }
}

这段代码创建了一个有大量文本数据的 JTextField,用 JScrollPane 来包含它。当 JTextField 大于 MyScrollPane 的可见区域时,将出现纵向和横向的滚动条。

BoxLayout

BoxLayout 是一个容器,也是一个布局管理器。它可以让开发者将组件摆放在水平或垂直方向上,实现流式布局。BoxLayout 可以与 JComponent 搭配使用,也可以作为其他容器的布局管理器。下面是一个将组件垂直排列的 BoxLayout 示例代码:

import javax.swing.*;

public class MyBoxLayout extends JPanel {
    public MyBoxLayout() {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

        // 添加组件
        JButton button1 = new JButton("Button 1");
        JButton button2 = new JButton("Button 2");
        JButton button3 = new JButton("Button 3");
        add(button1);
        add(button2);
        add(button3);

        // 添加空白区域
        add(Box.createVerticalGlue());

        // 添加居中对齐的文本
        JLabel label = new JLabel("Bottom Label");
        label.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        add(label);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("My Frame");
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyBoxLayout panel = new MyBoxLayout();
        frame.getContentPane().add(panel);

        frame.setVisible(true);
    }
}

这段代码创建了一个具有垂直流式布局的 MyBoxLayout JPanel。三个 JButton 组件按照竖直方向被添加到 MyBoxLayout 中,通过 Box.createVerticalGlue() 添加了一个空白区域。居中对齐的 JLabel 添加到了最底部。

以上就是 Swing 中常用的几个容器。程序员可以结合使用它们,创建各种复杂的 GUI 界面。