12 Java GUI

article/2025/8/4 10:01:54

Java 在图形开发中的占比并不是特别突出,尤其在传统的客户端图形界面开发方面。不是现代 UI 设计的首选

C#的WinForms(传统)、WPF(现代)是Windows 桌面开发的王者

跨平台(Windows/macOS/Linux),Qt 最强

Java GUI 开发技术概览

技术全称特点
AWTAbstract Window Toolkit最早的 GUI 库,依赖操作系统本地组件,外观不一致
Swing-基于 AWT 构建,纯 Java 实现,外观跨平台一致,功能更丰富
JavaFX-新一代 GUI 框架,支持 CSS、FXML、动画等现代 UI 功能
  • Swing 是建立在 AWT 基础之上的 GUI 工具包
  • Swing 的很多类继承自 AWT 类(如 ComponentContainer 等)。
  • Swing 的事件模型完全基于 AWT 的事件模型,也就是说:
    • Swing 使用了 AWT 的事件监听器接口(如 ActionListenerMouseListener 等)
    • 事件对象也来自 AWT 包(如 ActionEventMouseEvent

从 Java 11 开始,JavaFX 不再默认包含在标准 JDK 中

JavaFX 最初是在 Java 8 中正式集成进 JDK 的(即 Oracle JDK 8、9、10)但从 Java 11 开始(Oracle JDK 11 及 OpenJDK 发行版如 Adoptium、Amazon Corretto 等), JavaFX 从 JDK 中剥离出来,作为独立模块发布。

JavaFX 从 JDK 中剥离是为了适应现代软件开发的趋势,包括模块化、敏捷开发、开源协作等,并且这样做有利于加快 JavaFX 的发展步伐,同时也让 JDK 本身变得更加轻量和专注。 

JavaFX 变成了一个开源项目,由开源社区主导发展。

在运行 Java 程序时,需要通过 --module-path--add-modules 指定 JavaFX 的路径。

javac --module-path /path/to/javafx-sdk-21.0.2/lib \--add-modules=javafx.controls \ 
HelloFX.java java --module-path /path/to/javafx-sdk-21.0.2/lib \ 
--add-modules=javafx.controls \ 
HelloFX

由于Swing 技术栈成熟度高,不需要额外依赖 ,打包简单.对比JavaFX更轻量化 占用低资源更低. 在简单的界面(比如登录框、文本编辑器),和内部工具中,Swing 更适合

第十章我们做了一个聊天室小项目,其中就用到了swing技术.这一章我们会简单讲解swing.补齐我们java的知识体系.

AWT

AWT(Abstract Window Toolkit)是Java提供的一个用于创建图形用户界面(GUI)的工具包。它提供了一系列的基本组件和容器,使得开发者能够在不同平台上创建一致的用户界面。AWT的继承体系结构对于理解如何使用这些组件以及它们之间的关系非常重要。

Component

 Component 类是所有GUI组件(如按钮、标签、文本框等)的基类。它定义了组件的基本功能和属性。以下是 Component 类中一些常用的API方法

  • paint(Graphics g):用于自定义组件的绘图逻辑。
  • repaint():请求系统重绘组件
  • getName() 和 setName(String name):获取或设置组件的名字。
  • getParent():获取组件的父容器。
  • invalidate():标记组件为需要重新布局。
  • setToolTipText(String text):为组件设置工具提示文本。
  • setFont(Font font):设置组件使用的字体。
  • setBackground(Color c) 和 setForeground(Color c):设置组件的背景色和前景色(文本颜色)。
  • requestFocus():请求将输入焦点移到此组件上。
  • setEnabled(boolean b):启用或禁用组件。
  • setVisible(boolean b):显示或隐藏组件。
  • setBounds(int x, int y, int width, int height):设置组件的位置和大小。
  • getLocation() 和 setLocation(int x, int y):获取或设置组件的位置。
  • getSize() 和 setSize(Dimension d):获取或设置组件的大小。
  • getPreferredSize():返回组件的理想大小。

Container

  • Container 类是所有容器的直接或间接父类。它不仅拥有 Component 的所有特性(如绘制、事件处理等),还提供了管理和布局内部组件的方法。

  • 它提供了管理子组件的功能,比如添加(add(Component comp)方法)和移除(remove(Component comp)方法)组件。

  • setLayout(LayoutManager mgr):设置容器的布局管理器,用于控制容器内组件的排列方式。
  • getLayout():获取当前使用的布局管理器。
  • getComponents():返回容器中所有组件的数组。
  • getComponentCount():返回容器中组件的数量。
  • getComponent(int index):根据索引获取容器中的组件。
  • validate():确认容器内的所有组件都已正确布置,并且大小合适。
  • invalidate():标记容器为需要重新布局。
  • doLayout():让容器安排其子组件的位置和大小。通常不需要直接调用此方法,除非你需要强制重新布局。
  • applyComponentOrientation(ComponentOrientation o):对容器及其所有子组件应用组件方向。
  • isAncestorOf(Component c):检查指定组件是否为该容器或其任何子容器的子组件。
  • paintComponents(Graphics g):绘制容器中的所有组件。通常不需要直接调用此方法。

子类介绍

  1. Panel
    • 最基本的容器之一,用于将一组组件组合在一起。它没有边框,也不能独立存在,必须被放置在一个窗口或其他容器内。
      • Applet虽然严格来说不是 Container 的直接子类(它是 Panel 的子类),但在这里提及是因为它可以作为容器来组织GUI组件。Applet 是一种特殊的Java程序,设计为在网页中运行。
  2. ScrollPane
    • 提供了滚动功能的容器,当内容超出容器大小时,可以使用滚动条查看所有内容。适用于展示大量信息的情况。
  3. Window
    • 独立显示的顶级容器,不依赖于其他容器。它没有边框或标题栏,除非特别设置。Frame 和 Dialog 都是从 Window 继承来的
      • Frame是一个带有标题栏和边框的顶级容器,通常用作应用程序的主窗口。支持关闭按钮、最小化、最大化等功能。用户可以直接与其交互。
      • Dialog一个依赖于其他窗口的弹出式对话框,主要用于临时性的交互,如消息框、输入框等。有两种主要类型:模态对话框(阻止与其他窗口的交互直到其关闭)和非模态对话框(允许与应用程序的其他部分交互)。 

.
Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;
Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使用FlowLayout管理其内部组件布局;
ScrollPane是一个带滚动条的容器,它也不能独立存在,默认使用BorderLayout管理其内部组件布
局; 

布局管理器

1. FlowLayout
  • 描述:默认的布局管理器,按添加顺序从左至右放置组件,当一行放不下时自动换行。
  • 特点
    • 组件之间有默认的水平和垂直间距。
    • 可以设置对齐方式(左对齐、居中、右对齐)。
2. BorderLayout
  • 描述:将容器分为五个区域(东、西、南、北、中),每个区域可以放置一个组件。
  • 特点
    • 北部和南部组件扩展到容器的宽度;东部和西部组件扩展到容器的高度。
    • 中心组件占据剩余的空间,并随容器大小的变化而调整。
3. GridLayout
  • 描述:以网格形式均匀分布组件,所有组件具有相同的大小。
  • 特点
    • 每个组件占一个单元格,按添加顺序依次填充。
    • 可以指定行数和列数,如果组件数量超过网格单元,则自动增加行或列。
4. GridBagLayout
  • 描述:一种更复杂的网格布局,允许组件跨越多个行和列。
  • 特点
    • 使用GridBagConstraints对象来定义每个组件的位置、大小和其他属性。
    • 提供了高度的灵活性,但配置相对复杂。
5. CardLayout
  • 描述:就像一叠卡片,每次只显示一张卡片(容器中的一个组件)。
  • 特点
    • 通过特定的方法可以在不同的“卡片”间切换,适合实现选项卡式界面或多步骤向导。
6. GroupLayout
  • 描述:主要用于构建复杂的GUI,支持水平和垂直组的概念,方便进行精确的布局设计。
  • 特点
    • 可以创建层次化的布局结构,使得布局更加直观和易于理解。
    • 主要由NetBeans GUI Builder等可视化工具使用。


http://www.hkcw.cn/article/hVKMTHtITl.shtml

相关文章

当AI遇见千年古韵:解密“古韵智绘”,让传统纹样焕发新生机

目录: 引言:当千年古韵遇上AI,一场跨越时空的对话“古韵智绘”:不止于复刻,更是创新的引擎核心技术揭秘:AI如何“理解”并“创作”传统纹样? 基石:海量纹样数据库与智能特征提取神笔:基于GANs的AI纹样生成器魔术:风格迁移与融合的艺术桥梁:交互式编辑与开放API接口系…

[AD] Reaper NBNS+LLMNR+Logon 4624+Logon ID

QA QAForela-Wkstn001 的 IP 位址是什麼?172.17.79.129Forela-Wkstn002 的 IP 位址是什麼?172.17.79.136被攻擊者竊取雜湊值的帳戶的使用者名稱是什麼?arthur.kyle攻擊者用來攔截憑證的未知設備的 IP 位址是什麼?172.17.79.135受…

RAG入门之数据导入

LangChain 是什么 LangChain 是一个用于构建基于大语言模型(LLM)应用的开源框架。它提供了一套工具和抽象,让开发者能够轻松构建复杂的AI应用。 LangChain 的核心功能 文档加载和处理:支持多种格式(PDF、文本、网页…

科研学习|科研软件——激活后的Origin导出图时突然出现了demo水印

问题:画完图在导出图形时,导出的图有demo水印,如下图。 解决方法1:右击选择以管理员身份运行。 解决方法2:找到该软件的保存路径,双击Origin64.exe

一:UML类图

类之间的关系 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 学习设计模式的第一步是看懂UML类图,类图能直观的表达类、对象之间的关系,这将有助于后续对代码的编写。 常见的类之间的关系包括:继承…

Python数学可视化——环境搭建与基础绘图

Python数学可视化——环境搭建与基础绘图 数学函数可视化入门(一次函数/三角函数) 本节将建立Python科学计算环境,并创建基础函数绘图工具,可生成一次函数和三角函数的可视化图像,同时结合物理中的匀速直线运动案例。…

mask2former训练自己的语义分割数据集

一、环境配置 1.1下载源码 mask2former: https://github.com/facebookresearch/Mask2Former/tree/maindetectron2: https://github.com/facebookresearch/detectron2下载完后,新建一个文件夹,起个名字(我起的Mask2Former-main&#xff09…

如何使用1panel部署linux网站

找到官网,尝试一下在线安装 如果在线不成功,试一下离线安装 按照指令一步步执行即可,注意换成新版本的名称即可 如果成功,你会看到这个页面 1Panel Log]: [1Panel Log]: 感谢您的耐心等待,安装已完成 [1Panel Log]:…

个人用户进行LLMs本地部署前如何自查和筛选

一、个人用户硬件自查清单(从核心到次要) 1. 显卡(GPU)——决定性因素 显存容量(关键指标): 入门级(8~12GB):可运行7B模型(4bit量化)…

java Map双列集合

单列集合:一次只能添加一个元素 双列集合:一次添加两个元素,左边的叫键(唯一的不能重复),右边叫值(可以重复),键和值一一对应。这样一对叫:键值对/键值对对象…

在IIS上无法使用PUT等请求

错误来源: chat:1 Access to XMLHttpRequest at http://101.126.139.3:11000/api/receiver/message from origin http://101.126.139.3 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 其实我的后…

FastVLM: Efficient Vision Encoding for Vision Language Models——为视觉语言模型提供高效的视觉编码

这篇文章的核心内容是介绍了一种名为 FastVLM 的新型视觉语言模型(VLM),它通过一种高效的视觉编码器 FastViTHD,在高分辨率图像输入下实现了显著的性能提升和延迟降低。以下是文章的主要研究内容总结: 1. 研究背景与动…

关于开发板连接电脑找不到CH340解决方法大全(附ch340驱动下载链接)

一、一般开发板只需要一根支持传输数据的usb线就可以,找不到就是驱动没安装,一般win11系统会自动后台安装,如果没安装需要手动 ch340驱动官网:南京沁恒微电子股份有限公司 安装还失败就用这个(安装之后重启电脑就可以了…

Flask文件处理全攻略:安全上传下载与异常处理实战

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…

机器学习有监督学习sklearn实战二:六种算法对鸢尾花(Iris)数据集进行分类和特征可视化

本项目代码在个人github链接:https://github.com/KLWU07/Machine-learning-Project-practice 六种分类算法分别为逻辑回归LR、线性判别分析LDA、K近邻KNN、决策树CART、朴素贝叶斯NB、支持向量机SVM。 一、项目代码描述 1.数据准备和分析可视化 加载鸢尾花数据集&…

Vim 支持多种编程语言编辑器

软件简介 Vim是Vi编辑器的增强版,它提供了更多的功能和快捷键。Vim是一款自由软件,它是由Bram Moolenaar在1991年创建的。Vim支持多种编程语言,包括C、C、Java、Python、Perl等等。它是一款轻量级的编辑器,可以快速打开和编辑大型…

CppCon 2014 学习:Unicode in C++

在 Unicode 出现之前,计算机使用各种 单字节编码(Single-Byte Encodings) 来表示文本。理解这些编码对于学习字符集的演变过程很有帮助,以下是关键点的解释: 什么是单字节编码(Single-Byte Encoding&#…

【计算机网络】第3章:传输层—面向连接的传输:TCP

目录 一、PPT 二、总结 TCP(传输控制协议)详解 1. 概述 核心特性: 2. TCP报文段结构 关键字段说明: 3. TCP连接管理 3.1 三次握手(建立连接) 3.2 四次挥手(终止连接) 4. 可…

python打卡 DAY 18 推断聚类后簇的类型

目录 聚类结果分析与簇类型推断学习笔记 一、聚类后分析基础流程 1.1 基本分析步骤 1.2 常用可视化工具 二、簇特征分析方法 2.1 数值型特征分析 簇中心对比 雷达图展示 2.2 类别型特征分析 频数统计 卡方检验 三、簇类型推断技术 3.1 基于统计特征的推断 关键指标…

【RocketMQ 生产者和消费者】- 生产者发送同步、异步、单向消息源码分析(2)

文章目录 1. 前言2. InvokeCallback#operationComplete3. onExceptionImpl 异常处理4. 定时任务扫描 responseTable5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 【RocketMQ】- 源码系列目录【RocketMQ 生产者消费者】- 同步、异步、单向发送消费消息【RocketMQ 生产者和消费者…