上一篇                     
               
			  java怎么画界面
- 后端开发
- 2025-07-16
- 3197
 Java中,可以使用Swing或JavaFX库来创建图形用户界面(GUI)。
 
Java 图形界面开发指南
Java 提供了多种方式来创建图形用户界面(GUI),主要包括 AWT、Swing 和 JavaFX,本文将详细介绍这些技术及其使用方法,帮助你掌握 Java 界面开发的核心知识。
AWT(Abstract Window Toolkit)
AWT 是 Java 最早的 GUI 工具包,提供基础的窗口组件,它依赖操作系统本地组件,因此外观与平台一致。
1 基本结构
import java.awt.;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class AWTExample extends Frame {
    Button button;
    public AWTExample() {
        // 设置窗口属性
        setTitle("AWT 示例");
        setSize(300, 200);
        setLayout(new FlowLayout());
        // 创建按钮并添加事件监听
        button = new Button("点击我");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                button.setLabel("已点击");
            }
        });
        // 添加组件到窗口
        add(button);
        // 关闭窗口事件
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                dispose();
            }
        });
    }
    public static void main(String[] args) {
        AWTExample frame = new AWTExample();
        frame.setVisible(true);
    }
} 
2 常用组件
| 组件 | 说明 | 
|---|---|
| Frame | 顶级窗口 | 
| Button | 按钮 | 
| TextField | 单行文本输入框 | 
| Label | |
| Checkbox | 复选框 | 
| Choice | 下拉选择框 | 
3 布局管理器
AWT 使用布局管理器自动排列组件:
- FlowLayout:按添加顺序水平排列
- BorderLayout:分为东、南、西、北、中五个区域
- GridLayout:网格布局
- CardLayout:卡片式布局
setLayout(new BorderLayout());
add(new Button("北"), BorderLayout.NORTH);
add(new Button("南"), BorderLayout.SOUTH); 
Swing(Java Foundation Classes)
Swing 是 AWT 的增强版,提供更丰富的组件和更灵活的定制能力,且具有跨平台外观。

1 基本结构
import javax.swing.;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SwingExample extends JFrame {
    JButton button;
    public SwingExample() {
        // 设置窗口属性
        setTitle("Swing 示例");
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中显示
        // 创建按钮并添加事件监听
        button = new JButton("点击我");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                button.setText("已点击");
            }
        });
        // 使用面板和布局管理器
        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout());
        panel.add(button);
        // 添加面板到窗口
        add(panel);
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            SwingExample frame = new SwingExample();
            frame.setVisible(true);
        });
    }
} 
2 常用组件
| 组件 | 说明 | 
|---|---|
| JFrame | 顶级窗口 | 
| JButton | 按钮 | 
| JTextField | 单行文本输入框 | 
| JLabel | |
| JCheckBox | 复选框 | 
| JComboBox | 下拉选择框 | 
| JTable | 表格 | 
| JTree | 树形结构 | 
3 MVC 设计模式
Swing 采用 MVC(模型-视图-控制器)模式:
- 模型(Model):数据表示(如 TableModel)
- 视图(View):组件展示(如 JTable)
- 控制器(Controller):事件处理(如监听器)
4 高级特性
- 图标和图片:使用 ImageIcon加载图片资源
- 自定义渲染:通过重写 paintComponent方法绘制自定义内容
- 对话框:JOptionPane提供标准对话框(信息、确认、输入)
int result = JOptionPane.showConfirmDialog(null, "确认操作?", "提示", JOptionPane.YES_NO_OPTION);
JavaFX(JavaFX SDK)
JavaFX 是现代的 GUI 框架,支持 CSS 样式、FXML 布局和丰富的动画效果,适合复杂界面开发。
1 基本结构
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class JavaFXExample extends Application {
    @Override
    public void start(Stage primaryStage) {
        // 创建按钮并设置事件
        Button button = new Button("点击我");
        button.setOnAction(e -> button.setText("已点击"));
        // 使用布局容器
        StackPane root = new StackPane();
        root.getChildren().add(button);
        // 创建场景和设置舞台
        Scene scene = new Scene(root, 300, 200);
        primaryStage.setTitle("JavaFX 示例");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
} 
2 核心概念
- Stage:顶级窗口,对应应用程序主窗口
- Scene:包含所有内容的场景,可设置到 Stage
- Node:所有可视组件的基类(如 Button、Label)
- Layout:布局容器(如 VBox、HBox、GridPane)
- CSS 样式:通过 .css文件定义组件外观
3 FXML 布局
FXML 是用于描述 JavaFX 界面的 XML 格式,支持界面与逻辑分离。

example.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
<VBox alignment="CENTER" spacing="10">
    <Button text="点击我" onAction="#handleClick"/>
</VBox> 
ExampleController.java:
import javafx.fxml.FXML;
import javafx.scene.control.Button;
public class ExampleController {
    @FXML private Button myButton;
    @FXML
    protected void handleClick() {
        myButton.setText("已点击");
    }
} 
4 动画与效果
JavaFX 内置对动画的支持,如平移动画、缩放动画等。

TranslateTransition transition = new TranslateTransition(Duration.seconds(2), button); transition.setByX(100); transition.play();
技术对比与选择建议
| 特性 | AWT | Swing | JavaFX | 
|---|---|---|---|
| 出现时间 | JDK 1.0 | JDK 1.2 | JDK 8(模块化于 JDK 11) | 
| 组件风格 | 依赖系统原生组件 | 轻量级跨平台组件 | 现代化 UI,支持 CSS | 
| 性能 | 较低 | 中等 | 较高(硬件加速) | 
| 定制化 | 有限 | 较强 | 极强(CSS/FXML) | 
| 适用场景 | 简单桌面应用 | 传统桌面应用 | 富客户端、企业级应用 | 
选择建议:
- AWT:仅在需要与系统深度集成时使用(如特定平台功能)。
- Swing:适合中小型桌面应用,学习成本低。
- JavaFX:推荐新项目使用,尤其是需要复杂界面或跨平台一致性的应用。
常见问题与解决方案
1 界面卡顿或响应慢
- 原因:事件处理阻塞主线程(如 Swing/AWT)或大量 UI 更新。
- 解决:使用多线程处理耗时任务,Swing/AWT 中使用 SwingWorker,JavaFX 中使用Task。
2 组件大小不一致或模糊
- 原因:不同分辨率或缩放设置导致。
- 解决:使用布局管理器自适应布局,JavaFX 中启用 DPI 感知。
3 跨平台外观差异大(AWT/Swing)
- 解决:Swing 使用 UIManager统一外观,或迁移到 JavaFX。
FAQs
Q1:JavaFX 是否已包含在 JDK 中?如何引入?
A1:从 JDK 11 开始,JavaFX 不再随 JDK 捆绑,需单独下载 JavaFX SDK,可通过 Maven/Gradle 引入依赖,或手动配置模块路径,Maven 依赖:
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>20.0.1</version>
</dependency> 
Q2:Swing 和 JavaFX 能否混合使用?
A2:可以,但需谨慎处理,SwingNode 允许在 JavaFX 中嵌入 Swing 组件,反之需通过 JFXPanel。
 
  
			