当前位置:首页 > 后端开发 > 正文

java怎么画界面

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(模型-视图-控制器)模式:

java怎么画界面 第1张

  • 模型(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:

java怎么画界面 第2张

<?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。

java怎么画界面 第3张

0