Java基础-组件及事件处理(上)
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)
目录
Swing
概述
MVC 架构
Swing 特点
控件
SWING UI 元素
JFrame
SWING 容器
说明
常用方法
示例:
JDialog
说明
常用方法
重点内容
示例:
Swing
概述
Swing API 是一组可扩展的 GUI 组件,用来创建基于 JAVA 的前端/ GUI 应用程序。它是建立在 AWT API 之上,并且作为 AWT API 的替代者,因为它的几乎每一个控件都对应 AWT 控件。 Swing 组件遵循模型 - 视图 - 控制器架构来满足下面的准则。
一个单一的 API 足够支持多种外观和风格。
API 是模拟驱动的,这样最高层级的 API 不需要有数据。
API 是使用 Java Bean 模式的,这样 Builder Tools 和 IDE 可以为开发者提供更好的服务来使用它。
MVC 架构
Swing API 架构用下列的方式来遵循基于松散的 MVC 架构。
模型表示组件的数据。
视图表示组件数据的可视化表示形式。
控制器接受用户在视图上的输入,并且在组件的数据上反映变化。
Swing 组件把模型作为一个单独的元素,并且把视图和控制器部分组合成用户界面的元素。使用这种方式,Swing 具有可插拔的外观与风格架构。
Swing 特点
轻量级 —— Swing 组件是独立的本地操作系统的 API,因为 Swing API 控件通常采用纯 JAVA 代码而不是采用底层的操作系统调用来呈现。
丰富的控件 —— Swing 提供了一组丰富的先进的控件,如树,页签窗体,滑动条,颜色选择器,表格控件
高级自定义 —— Swing 控件可以用非常简单的方法来自定义,因为可视化外观是独立于内部表示的。
可插拔的外观和风格 —— 基于 Swing 的 GUI 应用程序的外观和风格可以在运行时根据有效的值改变。
控件
每个用户界面考虑有以下三个主要方面:
UI 元素: 有用户最终看到并且与之交互的核心视觉元素。GWT 提供了一个大量的广泛使用和常见的元素列表,本教程我们将涉及从基本到复杂的变化。
布局: 他们定义应该如何在屏幕上组织 UI 元素,并且提供一个最终的外观和风格给 GUI(图形用户界面)。这部分将在布局这一章涉及。
行为: 当用户与 UI 元素交互时,这些事件发生。这部分将在事件处理这一章涉及。
每个 SWING 控件从下列组件类的等级继承属性。
SWING UI 元素
下列是当使用 SWING 来设计 GUI 时常用的控件列表。
JFrame
SWING 容器
容器是 SWING GUI 组件的组成部分。一个容器提供了一个可以放置组件的空间。在 AWT 中,一个容器是组件本身,并且它增加了功能来添加组件本身。下面是需要考虑的注意事项。
容器的子类被称为容器。例如 JPanel,JFrame 和 JWindow。
容器可以仅仅添加组件到自身。
一个默认的布局使用 setLayout 方法来呈现在每个可以被重写的容器中。
下面是当使用 SWING 设计 GUI 事件时常用的容器列表。
JFrame – java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。
JPanel – Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,是一种轻量级容器,可以加入到JFrame窗体中。。JLabel – JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其显示区内垂直居中对齐。默认情况下,只显示文本的标签是开始边对齐;而只显示图像的标签则水平居中对齐。
JTextField –一个轻量级组件,它允许编辑单行文本。
JPasswordField – 允许我们输入了一行字像输入框,但隐藏星号(*) 或点创建密码(密码)
JButton – JButton 类的实例。用于创建按钮类似实例中的 "Login"。
说明
在Swing组件中,最常见的一个容器就是JFrame。
JFrame是一个独立存在的顶级容器(也叫窗口),不能放置在其他容器之中。
JFrame支持通用窗口所有的基本功能,例如窗口最小化、设定窗口大小等。
常用方法
1.JFrame() 创建一个无标题的窗口
2.JFrame(String s) 创建标题为s的窗口
3.public void setSize(int width,int height) 设置窗口大小
4.public void setLocation(int x,int y) 设置窗口位置,默认位置为(0,0)
5.public void setBounds(int a,int b,int width,int height) 设置窗口的初始位置是(a,b),即距离屏幕左边a个像素,距离屏幕上方b个像素,窗口的宽是width,高是height
6.public void setBackgorund(color.red) 设置窗体背景颜色7.public void setVisible(boolean b) 设置窗口是否可见,默认窗口是不可见的
8.public void setResizable(boolean b) 设置窗口是否可调整大小,默认窗口可调整大小
9.public void dispose() 撤销当前窗口并释放所有使用的资源
10.add(Component comp) 向容器中增加组件11.getContentpane() 返回此窗口的容器对象
12.public void setExtendedState(int state) 设置窗口的扩展状态,其中参数state取JFrame类中的下面类常量:
MAXIMIZED_HORIZ(水平方向最大化)
MAXIMIZED_VERI(垂直方向最大化)
MAXIMIZED_BOYH(水平、垂直方向最大化)13.public void setDefaultClose(int operation) 设置单击窗体右上角的关闭图标后,程序会做出怎样的处理
参数operation取JFrame类中的下列int型static常量,程序根据参数operation取值做出不同的处理:
DO_NOTHING_ON_CLOSE(什么也不做)
HIDE_ON_CLOSE(隐藏当前窗口)
DISPOSE_ON_CLOSE(隐藏当前窗口并释放窗体占有的其他资源)
EXIT_ON_CLOSE(结束窗口所在应用程序)
示例:
private static void createAndShowGUI(){//创建并设置JFrame容器窗口JFrame frame = new JFrame("JFrameTest"): //设置关闭窗口时的默认操作 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(250,150);/设置窗口尺寸frame.setVisible(true);//展示JFrame容器窗口 } public static void main(String] args){//使用SwingUtilities工具类调用createAndShowGUl()方法显示GUI程序 SwingUtilities.invokeLater(Example01::createAndShowGUl); }
结果:
示例通过JFrame类创建了一个窗体,并指定窗体对象标题为“JFrameTest”。
通过JFrame类的相关方法分别设置了窗体对象关闭时的操作、窗体尺寸大小以及窗体信息可见。
在main()方法中,使用了javax.swing包下中SwingUtilities(封装有一系列操作Swing的方法集合工具类)工具类的invokeLater()方法执行了GUI程序。
JDialog
JDialog是Swing的另外一个顶级容器,通常用来表示对话框窗口。
JDialog对话框可分为两种:模态对话框和非模态对话框。
模态对话框:是指用户需要等到处理完对话框后才能继续与其他窗口交互。
非模态对话框:是指允许用户在处理对话框的同时与其他窗口交互。
说明
虽然JFrame和JDialog都可以创建顶级容器窗口,但JDialog创建的窗口右上角没有放大和缩小功能。
由于创建JDialog容器对象时,设置的模态参数modal为true,所以在操作时,必须先关闭JDialog对话框后才可以与JFrame窗口进行交互。
常用方法
重点内容
1.super(超级)
主要用于打开了子窗体时,阻塞对父窗体的修改。也就是说打开了窗体便不能对父窗体有任何动作,关闭子窗体才可以对父窗体开始操作。
super(A,B,C);
A-----父窗体对象
B-----对话框标题
C-----是否阻塞父窗体2.按钮Btton
JButton btn=new JButton("弹出对话框");
表示创建按钮,然后按钮标签为“弹出对话框”。c.setLayout(new FlowLayout());
设置布局,使用流布局。不使用流布局(也就是当没有使用这句代码时),按钮会占满整个窗体,而不是像下面的淡蓝色长方形了。
示例:
import java.awt.Container;// 容器 import java.awt.FlowLayout;// 布局 import java.awt.event.ActionEvent;// 动作事件 import java.awt.event.ActionListener; // 动作监听 import javax.swing.*;// JDialog窗体是Swing组件中的对话框class Demo extends JDialog{ // Demo继承JDialog类public Demo(JFrame frame){/** 第一个参数:父窗体对象* 第二个参数:对话框标题* 第三个参数:是否阻塞父窗体*/super(frame,"对话框标题",true);Container c=getContentPane();// 获取窗体容器,Container(容器),content(内容),pane(窗格)c.add(new JLabel("这是一个对话框"));// 设置一个标签,label(标签)//1 setVisible(true);// 设置窗体可见,visible(可见物),放这最后对话框缩起来setBounds(400,300,100,100);// 设置窗体坐标,x、y、长、宽,bounds(界限)}public static void main(String[] args){JFrame f=new JFrame("父窗体");f.setBounds(300,200,300,300);Container c=f.getContentPane();JButton btn=new JButton("弹出对话框");c.setLayout(new FlowLayout());//设置布局,使用流布局c.add(btn);// 容器c里添加按钮f.setVisible(true);// 窗体是否可见f.setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭规则//添加动作监听btn.addActionListener(new ActionListener(){ // Action(行动)public void actionPerformed(ActionEvent e){// performed(执行),event(事件) //1 new Demo(f);// 传入f// 设置Demo类d,对d进行操作指令Demo d=new Demo(f);d.setVisible(true);// 设置窗体可视化}});} }
运行效果:
- 源码刚开始运行时,没有任何动作
- 点击按钮后
相关文章:

Java基础-组件及事件处理(上)
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 Swing 概述 MVC 架构 Swing 特点 控件 SWING UI 元素 JFrame SWING 容器 说明 常用方法 示例&a…...

Python实例:爱心代码
前言 在编程的奇妙世界里,代码不仅仅是冰冷的指令集合,它还可以成为表达情感、传递温暖的独特方式。今天,我们将一同探索用 Python 语言绘制爱心的神奇之旅。 爱心,这个象征着爱与温暖的符号,一直以来都在人类的情感世界中占据着特殊的地位。而通过 Python 的强大功能,…...

图解大模型训练系列:序列并行3,Ring Attention
在序列并行系列中,我们将详细介绍下面四种常用的框架/方法: Megatron Sequence Parallelism:本质是想通过降低单卡激活值大小的方式,尽可能多保存激活值,少做重计算,以此提升整体训练速度,一般…...

pyspark基础准备
1.前言介绍 学习目标:了解什么是Speak、PySpark,了解为什么学习PySpark,了解课程是如何和大数据开发方向进行衔接 使用pyspark库所写出来的代码,既可以在电脑上简单运行,进行数据分析处理,又可以把代码无缝…...

Netty报错
问题:因客户反馈Netty版本低,影响性能,建议提升。于是,我将所有Netty版本从4.1.82.Final到4.1.114.Final后,报下面的错误,java.lang.NoClassDefFoundError: io/netty/util/Recycler$EnhancedHandle…...

Kafka 之顺序消息
前言: 在分布式消息系统中,消息的顺序性是一个重要的问题,也是一个常见的业务场景,那 Kafka 作为一个高性能的分布式消息中间件,又是如何实现顺序消息的呢?本篇我们将对 Kafka 的顺序消息展开讨论。 Kafk…...

Kafka 之批量消息发送消费
前言: 前面我们分享了 Kafka 的一些基础知识,以及 Spring Boot 集成 Kafka 完成消息发送消费,本篇我们来分享一下 Kafka 的批量消息发送消费。 Kafka 系列文章传送门 Kafka 简介及核心概念讲解 Spring Boot 整合 Kafka 详解 Kafka Kafka…...

【大数据学习 | kafka】kafka的偏移量管理
1. 偏移量的概念 消费者在消费数据的时候需要将消费的记录存储到一个位置,防止因为消费者程序宕机而引起断点消费数据丢失问题,下一次可以按照相应的位置从kafka中找寻数据,这个消费位置记录称之为偏移量offset。 kafka0.9以前版本将偏移量信…...

实景三维赋能森林防灭火指挥调度智慧化
森林防灭火工作是保护森林资源和生态环境的重要任务。随着信息技术的发展,实景三维技术在森林防灭火指挥调度中的应用日益广泛,为提升防灭火工作的效率和效果提供了有力支持。 一、森林防灭火面临的挑战 森林火灾具有突发性强、破坏性大、蔓延速度快、…...

【C++课程学习】:string的模拟实现
🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一.string的主体框架: 二.string的分析: 🍔构造函数和析构函数&a…...

Linux(VMware + CentOS )设置固定ip
需求:设置ip为 192.168.88.130 先关闭虚拟机 启动虚拟机 查看当前自动获取的ip 使用 FinalShell 通过 ssh 服务远程登录系统,更换到 root 用户 修改ip配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 重启网卡 systemctl restart network …...

安卓 android studio各版本下载地址(官方)
https://developer.android.google.cn/studio/archive 别用中文,右上角的语言切换成英文...

如何在一个 Docker 容器中运行多个进程 ?
在容器化的世界里,Docker 彻底改变了开发人员构建、发布和运行应用程序的方式。Docker 容器封装了运行应用程序所需的所有依赖项,使其易于跨不同环境一致地部署。然而,在单个 Docker 容器中管理多个进程可能具有挑战性,这就是 Sup…...

poetry 配置多个cuda环境心得
操作系统:ubuntu22.04 LTS python版本:3.12.7 最近学习了用poetry配置python虚拟环境,当为不同的项目配置cuda时,会遇到不同的项目使用的cuda版本不一致的情况。 像torch 这样的库,它们会对cuda-toolkit有依赖&…...

网络编程入门
目录 1.网络编程入门 1.1 网络编程概述【理解】 1.2 网络编程三要素【理解】 1.3 IP地址【理解】 1.4InetAddress【应用】 1.5端口和协议【理解】 2.UDP通信程序 2.1 UDP发送数据【应用】 2.2UDP接收数据【应用】 2.3UDP通信程序练习【应用】 3.TCP通信程序 3.1TCP…...

Linux-socket详解
Linux-socket详解_socket linux-CSDN博客...

SQL Server 2022安装要求(硬件、软件、操作系统等)
SQL Server 2022安装要求 1、硬件要求2、软件要求3、操作系统支持4、Server Core 支持5、跨语言支持6、磁盘空间要求 1、硬件要求 以下内存和处理器要求适用于所有版本的 SQL Server: 组件要求存储SQL Server 要求最少 6 GB 的可用硬盘驱动器空间。 磁盘空间要求随…...

“众店模式”:创新驱动下的商业新生态
在数字化浪潮的推动下,传统商业模式正经历着前所未有的转型。“众店模式”作为一种新兴的商业模式,以其独特的商业逻辑和创新的玩法,为商家和消费者构建了一个共赢的商业新生态。 一、“众店模式”的核心构成 “众店模式”的成功࿰…...

54. 螺旋矩阵
https://leetcode.cn/problems/spiral-matrix/description/?envTypestudy-plan-v2&envIdtop-100-liked观察示例中的输出轨迹我们可以想到如下设计: 1.在朝某一方向行进到头后的改变方向是确定的,左->下,下->右,右->…...

剧本杀小程序,市场发展下的新机遇
剧本杀作为休闲娱乐的一种游戏方式,在短时间内进入了大众视野中,受到了广泛关注。近几年,剧本杀行业面临着创新挑战,商家需求寻求新的发展机遇,在市场饱和度下降的趋势下,获得市场份额。 随着科技的不断进…...

【系统架构设计师】论文:论基于 ABSD 的软件开发
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 摘要正文摘要 2022年5月,我就职的公司承接了xx的智慧党建工作,建设“党建红云” 系统,为xx公司的党组织提供觉务管理、服务功能,促进党员学习和党组织交流。我在该项目中承担架构设计师的职责,主导需求分析和…...

为什么OLED透明屏在同类产品中显示效果最好
说起OLED透明屏,这家伙在同类产品里那真的是“一枝独秀”啊!为啥这么说呢?且听我细细道来。 首先,OLED透明屏的透明度那是杠杠的!它不像传统显示屏那样有个固定的背景,而是可以实现像素级的透明效果。这样一…...

深度学习基础知识-Batch Normalization(BN)超详细解析
一、背景和问题定义 在深层神经网络(Deep Neural Networks, DNNs)中,层与层之间的输入分布会随着参数更新不断发生变化,这种现象被称为内部协变量偏移(Internal Covariate Shift)。具体来说,由…...

基于单片机的燃气报警阀门系统
本设计基于单片机的燃气报警阀门系统,燃气报警阀门系统采用STM32主控制器为核心芯片,外围电路由燃气传感器、OLED液晶显示模块、按键模块、蜂鸣器报警模块、电磁阀以及SIM800模块等模块组成。燃气传感器模块负责采集燃气浓度数据,采集完成由S…...

watch与computed的区别、运用的场景
computed和watch都是响应式数据变化的重要机制,但它们在功能、使用场景和性能表现上有显著的区别。 主要区别 功能和用途 1、computed:计算属性,用于基于其他数据属性进行计算,并返回一个结果。它具有缓存机制,只有当…...

【ESP32+MicroPython】开发环境部署
本教程将指导你如何在Visual Studio Code(VSCode)中设置ESP32的MicroPython开发环境。我们将涵盖从安装Python到烧录MicroPython固件的整个过程,以及如何配置VSCode以便与ESP32进行交互。 准备工作 安装Python 确保你的计算机上安装了Pyth…...

Vision - 开源视觉分割算法框架 Grounded SAM2 配置与推理 教程 (1)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/143388189 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Ground…...

DAY21|二叉树Part08|LeetCode: 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
目录 LeetCode: 669. 修剪二叉搜索树 基本思路 C代码 LeetCode: 108.将有序数组转换为二叉搜索树 基本思路 C代码 LeetCode: 538.把二叉搜索树转换为累加树 基本思路 C代码 LeetCode: 669. 修剪二叉搜索树 力扣代码链接 文字讲解:LeetCode: 669. 修剪二叉搜…...

在gitlab,把新分支替换成master分支
1、备份master分支,可以打tag 2、删除master分支 正常情况下,master分支不允许删除,需要做两个操作才能删除 a、变更项目默认分支为非master分支,可以先随便选择 b、取消master为非保护分支 操作了上述两步,就可以删…...

使用 Spring Boot 集成 Thymeleaf 和 Flying Saucer 实现 PDF 导出
在 Spring Boot 项目中,生成 PDF 报表或发票是常见需求。本文将介绍如何使用 Spring Boot 集成 Thymeleaf 模板引擎和 Flying Saucer 实现 PDF 导出,并提供详细的代码实现和常见问题解决方案。 目录 一、项目依赖二、创建 Thymeleaf 模板三、创建 PDF 生…...