首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java GUI 编程全攻略:Swing 与 JavaFX 入门实战

Java GUI 编程全攻略:Swing 与 JavaFX 入门实战

原创
作者头像
用户11690575
发布2025-06-06 21:04:47
发布2025-06-06 21:04:47
57000
代码可运行
举报
运行总次数:0
代码可运行

一、引言:Java 的图形用户界面开发

Java 不仅能写服务器端程序,还可以用于创建桌面图形界面应用。常用的 GUI 库包括:

  • AWT(Abstract Window Toolkit):早期库,功能有限。
  • Swing:更现代,功能丰富,是 AWT 的扩展。
  • JavaFX:新一代 GUI 框架,支持样式、动画、图形等。

🎯 本文将重点介绍 Swing 和 JavaFX 的基本用法和项目实战。


二、Swing 基础:轻量级 GUI 编程

2.1 Swing 的核心组件

组件

说明

JFrame

主窗口

JPanel

面板容器

JLabel

标签

JButton

按钮

JTextField

文本输入框

JTextArea

多行文本输入

2.2 创建一个简单窗口

代码语言:javascript
代码运行次数:0
运行
复制
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
代码运行次数:0
运行
复制
diff复制编辑+------------------------+
|      你好,Swing!     |
+------------------------+

2.3 添加按钮与事件响应

代码语言:javascript
代码运行次数:0
运行
复制
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
代码运行次数:0
运行
复制
java复制编辑frame.setLayout(new FlowLayout());
frame.add(new JButton("按钮1"));
frame.add(new JButton("按钮2"));

三、Swing 项目实战:记事本应用

3.1 基本功能设计

功能需求:

  • 文本编辑区域
  • 打开 / 保存 文件
  • 清空 / 退出 功能

3.2 UI 结构示意图:

代码语言:javascript
代码运行次数:0
运行
复制
diff复制编辑+-----------------------------+
| 菜单栏:文件 编辑         |
+-----------------------------+
|                             |
|       JTextArea            |
|                             |
+-----------------------------+

3.3 实现代码:

代码语言:javascript
代码运行次数:0
运行
复制
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 可视化

动画支持

基本

强大

性能表现

中等

更好


4.2 Hello JavaFX 示例

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {
    @Override
    public void start(Stage stage) {
        Label label = new Label("你好,JavaFX!");
        StackPane root = new StackPane(label);
        Scene scene = new Scene(root, 400, 300);
        stage.setTitle("JavaFX 示例");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

🖼️ 与 Swing 相比,结构更清晰,支持 CSS 美化和动画。


4.3 JavaFX 控件与布局

控件

说明

Button

按钮

TextField

文本框

Label

标签

TextArea

多行文本

TableView

表格控件

ListView

列表视图

常见布局容器:

  • VBox, HBox(垂直/水平)
  • BorderPane
  • GridPane
  • StackPane

4.4 使用 FXML 构建界面

FXML 是 JavaFX 的 UI 描述语言,示例:

代码语言:javascript
代码运行次数:0
运行
复制
xml复制编辑<?xml version="1.0" encoding="UTF-8"?>
<VBox xmlns="http://javafx.com/javafx"
      xmlns:fx="http://javafx.com/fxml"
      fx:controller="com.example.Controller">
    <Label text="欢迎使用" />
    <Button text="点击" onAction="#handleClick" />
</VBox>

控制器代码:

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑public class Controller {
    public void handleClick() {
        System.out.println("按钮被点击!");
    }
}

五、综合实战:JavaFX 制作简易计算器

5.1 功能设计

  • 支持加减乘除
  • 两个输入框 + 一个结果框
  • 多个按钮触发运算

5.2 样式展示

代码语言:javascript
代码运行次数:0
运行
复制
less复制编辑+-----------------------------+
| 输入1:[    ]              |
| 输入2:[    ]              |
| [ + ] [ - ] [ * ] [ / ]    |
| 结果:[          ]         |
+-----------------------------+

5.3 实现代码(精简版)

代码语言:javascript
代码运行次数:0
运行
复制
java复制编辑public class CalculatorApp extends Application {
    @Override
    public void start(Stage stage) {
        TextField input1 = new TextField();
        TextField input2 = new TextField();
        Label result = new Label("结果");

        Button add = new Button("+");
        add.setOnAction(e -> {
            double a = Double.parseDouble(input1.getText());
            double b = Double.parseDouble(input2.getText());
            result.setText("结果: " + (a + b));
        });

        HBox buttons = new HBox(10, add, new Button("-"), new Button("*"), new Button("/"));
        VBox root = new VBox(10, input1, input2, buttons, result);

        Scene scene = new Scene(root, 300, 200);
        stage.setScene(scene);
        stage.setTitle("计算器");
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

六、GUI 项目建议与总结

6.1 GUI 开发建议

  • 使用布局管理器避免界面混乱
  • 尽量封装组件与事件处理
  • JavaFX 推荐使用 Scene Builder + FXML
  • 多线程 UI 更新需小心(JavaFX 使用 Platform.runLater

6.2 GUI 框架选择建议

场景

推荐

学习 / 跨平台桌面工具

Swing

需要现代界面、CSS 支持

JavaFX

企业级界面(大型系统)

JavaFX + FXML


七、后续方向推荐

  • 深入 JavaFX 动画和图形绘制
  • 学习 SceneBuilder 创建可视化界面
  • 尝试使用第三方 UI 库(如 JFoenix)
  • JavaFX 与数据库(JDBC)结合

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、引言:Java 的图形用户界面开发
  • 二、Swing 基础:轻量级 GUI 编程
    • 2.1 Swing 的核心组件
    • 2.2 创建一个简单窗口
    • 2.3 添加按钮与事件响应
    • 2.4 布局管理器概述
  • 三、Swing 项目实战:记事本应用
    • 3.1 基本功能设计
    • 3.2 UI 结构示意图:
    • 3.3 实现代码:
  • 四、JavaFX:现代 Java GUI 新选择
    • 4.1 JavaFX 与 Swing 的对比
    • 4.2 Hello JavaFX 示例
    • 4.3 JavaFX 控件与布局
    • 4.4 使用 FXML 构建界面
  • 五、综合实战:JavaFX 制作简易计算器
    • 5.1 功能设计
    • 5.2 样式展示
    • 5.3 实现代码(精简版)
  • 六、GUI 项目建议与总结
    • 6.1 GUI 开发建议
    • 6.2 GUI 框架选择建议
  • 七、后续方向推荐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档