杰瑞科技汇

java swing图形界面开发与案例

  1. Swing 简介:什么是 Swing,它有什么特点。
  2. 核心概念:Swing 的基本架构,如容器、组件、布局管理器。
  3. 常用组件详解:介绍开发中最高频的 Swing 组件。
  4. 事件处理:如何让界面响应用户操作(如点击按钮)。
  5. 完整案例:开发一个功能完整的“学生信息管理系统”登录界面。
  6. 高级特性与资源:MVC 模式、外观设置、学习资源推荐。

Swing 简介

Swing 是 Java 基础类库的一部分,它是一个用于开发图形用户界面的工具包,它完全用 Java 语言编写,不依赖于本地平台的 GUI,因此具有 “跨平台” 的特性,无论是在 Windows、macOS 还是 Linux 上,其外观和行为都保持一致。

java swing图形界面开发与案例-图1
(图片来源网络,侵删)

主要特点:

  • 轻量级组件:Swing 组件(如 JButton, JTextField)不直接调用操作系统的 GUI API,而是自己绘制,因此称为“轻量级”,与之相对的是 AWT 的“重量级”组件(如 Button, TextField)。
  • 丰富的组件库:提供了从基础按钮、文本框到复杂表格、树形结构、选项卡等超过 100 种组件。
  • 可定制外观:支持“观感”(Look and Feel),可以轻松改变整个应用程序的外观,使其看起来像 Windows、macOS 或 GTK 等不同系统的原生界面。
  • 强大的 MVC 架构:Swing 组件大多遵循模型-视图-控制器 设计模式,使得数据和显示逻辑分离,便于开发和维护。

核心概念

在开始写代码前,必须理解三个最基本的概念。

1 容器

容器是能“盛放”其他组件的特殊组件,没有容器,组件就无法在窗口中显示。

  • 顶层容器:最外层的窗口,不能被其他容器包含。

    java swing图形界面开发与案例-图2
    (图片来源网络,侵删)
    • JFrame:一个独立的窗口,有标题栏、边框、最小化/最大化/关闭按钮,这是我们创建 GUI 应用程序的主窗口
    • JDialog:一个对话框窗口,通常用于临时交互,通常依赖于某个 JFrame
    • JApplet:已过时,用于在浏览器中运行 Java 小程序。
    • JWindow:一个无边框、无标题栏的窗口,较少使用。
  • 中间容器:用于布局和组合其他组件,必须被放在顶层容器中。

    • JPanel:最常用的中间容器,默认使用 FlowLayout,常用于将相关组件组合在一起。
    • JScrollPane:为组件(如 JTextAreaJTable)添加滚动条。
    • JSplitPane:一个分割面板,可以将两个组件水平或垂直地分割开。
    • JTabbedPane:选项卡面板,可以在一个窗口中通过选项卡切换显示不同的内容。

2 组件

组件是 Swing 界面的基本构成元素,如按钮、标签、文本框等,它们被放置在容器中,所有 Swing 组件的根类是 JComponent

3 布局管理器

布局管理器负责决定容器中组件的位置和大小,Swing 不推荐使用绝对坐标(setBounds(x, y, width, height)),因为这样在不同分辨率和操作系统的屏幕上会显得很奇怪。

常见的布局管理器:

  • FlowLayout(流式布局):组件从左到右、从上到下像流水一样排列,默认是 JPanel 的布局。
  • BorderLayout(边界布局):将容器划分为东、南、西、北、中五个区域,每个区域只能放一个组件,是 JFrame 的默认布局。
  • GridLayout(网格布局):将容器划分为一个 M×N 的网格,每个组件占据一个网格单元。
  • GridBagLayout(网格包布局):最强大也最复杂的布局管理器,允许组件跨越多个网格,并可以精细控制对齐方式。
  • BoxLayout(盒式布局):允许组件在水平或垂直方向上一字排开。
  • GroupLayout:通常与 GUI 设计器(如 NetBeans 或 IntelliJ IDEA 的可视化设计器)配合使用,非常灵活。

常用组件详解

组件名称 类名 功能描述
窗口 JFrame 应用程序的主窗口。
按钮 JButton 点击后触发一个动作事件。
JLabel 用于显示文本或图标,不可编辑。
文本框 JTextField 单行文本输入。
密码框 JPasswordField 单行密码输入,输入时显示遮罩字符(如 )。
文本区域 JTextArea 多行文本编辑区域,不自动换行,通常放入 JScrollPane
复选框 JCheckBox 提供一个“选中/未选中”的选项。
单选按钮 JRadioButton 在一个 ButtonGroup 中,只能被选中一个。
下拉列表 JComboBox 提供一个下拉菜单供用户选择。
列表框 JList 显示一个可滚动的项目列表,支持多选。
表格 JTable 以二维表格形式显示数据。
JTree 以分层结构显示数据。
菜单栏 JMenuBar 窗口顶部的菜单栏。
菜单 JMenu 菜单栏中的下拉菜单,如“文件”、“编辑”。
菜单项 JMenuItem 菜单中的具体选项。

事件处理

Swing 使用 事件监听器 模式来处理用户交互,基本步骤如下:

  1. 创建事件源:比如一个 JButton
  2. 创建监听器:实现一个监听器接口(如 ActionListener),并重写其处理方法(如 actionPerformed)。
  3. 注册监听器:调用事件源的 addActionListener() 方法,将监听器对象注册到事件源上。

示例:

// 1. 创建事件源
JButton myButton = new JButton("点击我");
// 2. 创建监听器(使用匿名内部类)
ActionListener listener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // 当按钮被点击时,这段代码会执行
        System.out.println("按钮被点击了!");
        JOptionPane.showMessageDialog(null, "你好,Swing!");
    }
};
// 3. 注册监听器
myButton.addActionListener(listener);

完整案例:学生管理系统登录界面

我们综合运用以上知识,创建一个美观实用的登录界面。

目标界面:

步骤 1:创建主窗口 JFrame

import javax.swing.*;
import java.awt.*;
public class LoginFrame extends JFrame {
    public LoginFrame() {
        // 1. 设置窗口基本属性
        setTitle("学生信息管理系统 - 登录");
        setSize(400, 300); // 窗口大小
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出程序
        setLocationRelativeTo(null); // 窗口居中显示
        // 2. 创建主面板,并设置布局
        // 使用 JPanel 和 GroupLayout 可以实现更灵活的布局
        JPanel mainPanel = new JPanel();
        GroupLayout layout = new GroupLayout(mainPanel);
        mainPanel.setLayout(layout);
        layout.setAutoCreateGaps(true); // 自动创建组件之间的间隙
        layout.setAutoCreateContainerGaps(true); // 自动创建容器与组件之间的间隙
        // ... (后续组件将添加到 mainPanel)
        // 3. 将主面板添加到窗口
        this.add(mainPanel);
    }
    public static void main(String[] args) {
        // 在事件调度线程中创建和显示 GUI,这是 Swing 的最佳实践
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new LoginFrame().setVisible(true);
            }
        });
    }
}

步骤 2:添加组件并设置布局

我们将使用 GroupLayout 来精确控制组件位置,它需要我们分别定义水平垂直的组。

// 在 LoginFrame 的构造函数中继续添加
// 3. 创建组件JLabel titleLabel = new JLabel("用户登录");Label.setFont(new Font("微软雅黑", Font.BOLD, 20)); // 设置字体Label.setHorizontalAlignment(SwingConstants.CENTER); // 文
分享:
扫描分享到社交APP
上一篇
下一篇