Java 除了广泛用于后端开发与跨平台服务,也支持图形用户界面(GUI)的开发。对于需要构建桌面应用、工具软件、图形交互系统的场景,Java 的 GUI 框架(如 Swing、JavaFX)提供了丰富的组件和事件机制。
本文将带你入门 Swing GUI 开发,并通过一个实战项目,构建一个简单但完整的 Java 桌面应用。
Java 支持多种 GUI 开发方式,最常见有:
技术 | 特点 |
---|---|
AWT | 最早的 GUI,依赖本地组件,跨平台性差 |
Swing | AWT 的增强版,组件完全由 Java 实现 |
JavaFX | 面向现代 UI,支持动画、CSS 样式 |
📌 本文主要基于 Swing,因其稳定、适合初学者。
Swing 提供了大量的 GUI 组件:
JFrame
、JDialog
JPanel
JButton
、JTextField
、JLabel
、JCheckBox
、JComboBox
FlowLayout
、BorderLayout
、GridLayout
🖼️ 组件结构如下图:
markdown复制编辑JFrame
└── JPanel
├── JLabel
├── JTextField
└── JButton
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);
}
}
运行效果如图:
🖼️
让用户输入内容并点击按钮后显示消息。
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 | 表格样式布局 | 所有单元格大小一致 |
示例:
java复制编辑frame.setLayout(new BorderLayout());
frame.add(new JButton("北"), BorderLayout.NORTH);
frame.add(new JButton("中"), BorderLayout.CENTER);
frame.add(new JButton("东"), BorderLayout.EAST);
我们来做一个具有基本功能的记事本 GUI 应用,包括菜单栏、文本区和保存按钮。
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 的事件机制基于 “监听器” 模式:
java复制编辑button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 按钮点击响应
}
});
也可使用 Lambda 表达式简化:
java复制编辑button.addActionListener(e -> {
System.out.println("按钮被点击!");
});
java复制编辑textArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));
textArea.setForeground(Color.BLUE);
textArea.setBackground(new Color(240, 240, 240));
添加图标:
java复制编辑ImageIcon icon = new ImageIcon("logo.png");
frame.setIconImage(icon.getImage());
Java GUI 是桌面软件开发的重要入口,通过 Swing,开发者可快速构建交互界面,部署于跨平台桌面系统中。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。