Java GUI 编程全攻略:Swing 与 JavaFX 入门实战
- AWT(Abstract Window Toolkit):早期库,功能有限。
- Swing:更现代,功能丰富,是 AWT 的扩展。
- JavaFX:新一代 GUI 框架,支持样式、动画、图形等。
🎯 本文将重点介绍 Swing 和 JavaFX 的基本用法和项目实战。
二、Swing 基础:轻量级 GUI 编程
2.1 Swing 的核心组件
组件 | 说明 |
|---|---|
JFrame | 主窗口 |
JPanel | 面板容器 |
JLabel | 标签 |
JButton | 按钮 |
JTextField | 文本输入框 |
JTextArea | 多行文本输入 |
2.2 创建一个简单窗口
代码语言:javascript
AI代码解释
java复制编辑import javax.swing.*; public class HelloSwing { public static void main(String[] args) { JFrame frame = new JFrame("Swing 示例"); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("你好,Swing!"); frame.add(label); frame.setVisible(true); } }🖼️ 运行效果:
代码语言:javascript
AI代码解释
diff复制编辑+------------------------+ | 你好,Swing! | +------------------------+2.3 添加按钮与事件响应
代码语言:javascript
AI代码解释
java复制编辑JButton button = new JButton("点击我"); button.addActionListener(e -> { JOptionPane.showMessageDialog(frame, "按钮被点击了!"); }); frame.add(button);📌 事件监听机制是 Swing 的核心,基于观察者模式。
2.4 布局管理器概述
Swing 提供多种布局方式:
布局管理器 | 说明 |
|---|---|
FlowLayout | 流式排列,默认布局 |
BorderLayout | 上下左右中五个区域 |
GridLayout | 表格状布局 |
BoxLayout | 单行/单列组件排列 |
null | 自由布局(需 setBounds) |
示例:
代码语言:javascript
AI代码解释
java复制编辑frame.setLayout(new FlowLayout()); frame.add(new JButton("按钮1")); frame.add(new JButton("按钮2"));三、Swing 项目实战:记事本应用
3.1 基本功能设计
功能需求:
- 文本编辑区域
- 打开 / 保存 文件
- 清空 / 退出 功能
3.2 UI 结构示意图:
代码语言:javascript
AI代码解释
diff复制编辑+-----------------------------+ | 菜单栏:文件 编辑 | +-----------------------------+ | | | JTextArea | | | +-----------------------------+3.3 实现代码:
代码语言:javascript
AI代码解释
java复制编辑public class SimpleNotepad { public static void main(String[] args) { JFrame frame = new JFrame("记事本"); JTextArea textArea = new JTextArea(); frame.add(new JScrollPane(textArea)); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("文件"); JMenuItem openItem = new JMenuItem("打开"); JMenuItem saveItem = new JMenuItem("保存"); JMenuItem exitItem = new JMenuItem("退出"); openItem.addActionListener(e -> { JFileChooser chooser = new JFileChooser(); if (chooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) { try { File file = chooser.getSelectedFile(); textArea.setText(Files.readString(file.toPath())); } catch (IOException ex) { ex.printStackTrace(); } } }); saveItem.addActionListener(e -> { JFileChooser chooser = new JFileChooser(); if (chooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION) { try { File file = chooser.getSelectedFile(); Files.writeString(file.toPath(), textArea.getText()); } catch (IOException ex) { ex.printStackTrace(); } } }); exitItem.addActionListener(e -> System.exit(0)); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(exitItem); menuBar.add(fileMenu); frame.setJMenuBar(menuBar); frame.setSize(500, 400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }✅ 实现了基本的记事本功能,适合初学 Swing 项目开发。
四、JavaFX:现代 Java GUI 新选择
4.1 JavaFX 与 Swing 的对比
对比点 | Swing | JavaFX |
|---|---|---|
样式支持 | 较弱 | 支持 CSS |
UI 构建方式 | 代码手写 | 可使用 FXML 可视化 |
动画支持 | 基本 | 强大 |
性能表现 | 中等 | 更好 |