一、前言Java 除了广泛用于后端开发与跨平台服务,也支持图形用户界面(GUI)的开发。对于需要构建桌面应用、工具软件、图形交互系统的场景,Java 的 GUI 框架(如 Swing、JavaFX)提供了丰富的组件和事件机制。
本文将带你入门 Swing GUI 开发,并通过一个实战项目,构建一个简单但完整的 Java 桌面应用。
二、Java GUI 技术体系概览Java 支持多种 GUI 开发方式,最常见有:
技术
特点
AWT
最早的 GUI,依赖本地组件,跨平台性差
Swing
AWT 的增强版,组件完全由 Java 实现
JavaFX
面向现代 UI,支持动画、CSS 样式
📌 本文主要基于 Swing,因其稳定、适合初学者。
三、Swing 的基本结构Swing 提供了大量的 GUI 组件:
顶层容器:JFrame、JDialog
面板:JPanel
控件:JButton、JTextField、JLabel、JCheckBox、JComboBox
布局管理器:FlowLayout、BorderLayout、GridLayout
🖼️ 组件结构如下图:
代码语言:javascript复制markdown复制编辑JFrame
└── JPanel
├── JLabel
├── JTextField
└── JButton四、创建你的第一个 GUI 程序代码语言:javascript复制java复制编辑import javax.swing.*;
public class HelloSwing {
public static void main(String[] args) {
JFrame frame = new JFrame("第一个窗口");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("你好,Swing!", SwingConstants.CENTER);
frame.add(label);
frame.setVisible(true);
}
}运行效果如图:
🖼️
五、添加输入框与按钮让用户输入内容并点击按钮后显示消息。
代码语言:javascript复制java复制编辑import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class InputDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("输入演示");
frame.setSize(400, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
JLabel label = new JLabel("请输入你的名字:");
JTextField textField = new JTextField(20);
JButton button = new JButton("确认");
frame.add(label);
frame.add(textField);
frame.add(button);
button.addActionListener(e -> {
String name = textField.getText();
JOptionPane.showMessageDialog(frame, "你好," + name + "!");
});
frame.setVisible(true);
}
}🖼️ 图示操作流程:
输入框中输入 "小明"
点击按钮后弹出对话框 “你好,小明!”
六、布局管理器详解Swing 中组件如何排列由布局管理器控制:
常见布局示意:布局类型
示例用途
说明
FlowLayout
简单排列
默认布局,组件从左到右流动
BorderLayout
典型窗口界面
东西南北中五个区域
GridLayout
表格样式布局
所有单元格大小一致
示例:
代码语言:javascript复制java复制编辑frame.setLayout(new BorderLayout());
frame.add(new JButton("北"), BorderLayout.NORTH);
frame.add(new JButton("中"), BorderLayout.CENTER);
frame.add(new JButton("东"), BorderLayout.EAST);七、综合实战:记事本小程序我们来做一个具有基本功能的记事本 GUI 应用,包括菜单栏、文本区和保存按钮。
7.1 功能需求 多行输入
保存按钮可将内容写入本地文件
清空按钮清空文本框
7.2 完整代码代码语言:javascript复制java复制编辑import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class NoteApp {
public static void main(String[] args) {
JFrame frame = new JFrame("Java 记事本");
frame.setSize(500, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
JTextArea textArea = new JTextArea();
JScrollPane scrollPane = new JScrollPane(textArea);
frame.add(scrollPane, BorderLayout.CENTER);
JPanel panel = new JPanel();
JButton saveButton = new JButton("保存");
JButton clearButton = new JButton("清空");
panel.add(saveButton);
panel.add(clearButton);
frame.add(panel, BorderLayout.SOUTH);
// 保存逻辑
saveButton.addActionListener(e -> {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("note.txt"))) {
writer.write(textArea.getText());
JOptionPane.showMessageDialog(frame, "保存成功!");
} catch (IOException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(frame, "保存失败!");
}
});
// 清空逻辑
clearButton.addActionListener(e -> textArea.setText(""));
frame.setVisible(true);
}
}🖼️ GUI 界面如下:
中部:大文本框
底部:两个按钮(保存、清空)
八、事件监听机制Swing 的事件机制基于 “监听器” 模式:
代码语言:javascript复制java复制编辑button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 按钮点击响应
}
});也可使用 Lambda 表达式简化:
代码语言:javascript复制java复制编辑button.addActionListener(e -> {
System.out.println("按钮被点击!");
});九、增强体验:设置字体、颜色、图标代码语言:javascript复制java复制编辑textArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));
textArea.setForeground(Color.BLUE);
textArea.setBackground(new Color(240, 240, 240));添加图标:
代码语言:javascript复制java复制编辑ImageIcon icon = new ImageIcon("logo.png");
frame.setIconImage(icon.getImage());十、总结与扩展方向本文回顾: 了解了 Swing 基本结构
构建了输入交互窗口
实现了记事本 GUI 应用
理解了事件监听与布局管理
后续可扩展: 使用 JavaFX 提升美观度
集成文件打开/另存为功能
增加字体调整、字数统计等插件
构建带登录界面的应用
Java GUI 是桌面软件开发的重要入口,通过 Swing,开发者可快速构建交互界面,部署于跨平台桌面系统中。