Java一个简单的反弹动画练习
文章目录
- 说明
- 代码详解
- 创建窗体代码
- 创建绘图板
- 创建线程
- 运行结果
- 完整代码
说明
做了一个小球和星型做反弹动画的窗体作为练习,分享给大家,为了方便和我一样的小白可以看的比较明白,所以尽量详细的标注了注释,希望能帮到同样在学习路上的朋友
代码详解
创建窗体代码
public class AnimationJFrame extends JFrame {//实例化属性private final DrawCircleAndStar drawCircleAndStar = new DrawCircleAndStar();//实例化图形绘制private final JButton jButton = new JButton();//实例化按钮private final AnimationRun animationRun = new AnimationRun();//实例化线程//设置绘图全局属性private int circleX = 0;//圆形的初始位置X坐标private int circleY = 10;//圆形的初始位置Y坐标private int circleXDirection = 1;//圆形运动X轴方向private int circleYDirection = 1;//圆形运动Y轴方向private int starX = 355;//星型的初始位置X坐标private int starY = 200;//星型的初始位置Y坐标private int starXDirection = 1;//星形运动X轴方向private int starYDirection = 1;//星形运动Y轴方向//构造方法构造窗体public AnimationJFrame(){//窗体基本设置Container conn = getContentPane();//建立窗体容器setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭方式setBounds(300,300,400,400);//设置窗体位置及大小setResizable(false);//窗体大小不可改变setLayout(null);//清空窗体布局管理器,不采用默认布局//创建动画布局JPanel jPanel = new JPanel();//实例化布局jPanel.setLayout(null);//清空布局的布局管理器,不采用默认布局jPanel.setBounds(10, 10, 365, 300);//动画布局的位置及大小jPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));//设置动画布局的边框jPanel.setBackground(Color.LIGHT_GRAY);//设置动画布局的底色//创建动画图形的标签容器JLabel jLabel = new JLabel();//实例化标签jLabel.setBounds(0,0,365,300);//设置动画标签的大小和位置//设置绘图标签drawCircleAndStar.setBackground(new Color(0,0,0,0));//设置绘图标签的背景透明drawCircleAndStar.setSize(365,300);//设置绘图标签的大小jLabel.add(drawCircleAndStar);//添加绘图板到标签jPanel.add(jLabel);//添加动画标签到动画布局//设置按键jButton.setText("开始");//设置按键显示文字jButton.setFont(new Font("黑体", Font.PLAIN, 14));//设置按键文字的字体jButton.setBounds(275, 320, 100, 22);//设置按键的位置和大小//添加原件到窗体容器conn.add(jPanel);//添加动漫布局到容器conn.add(jButton);//添加按钮到容器//给按钮添加监听jButton.addActionListener(e -> {if (e.getActionCommand().equals("开始")){jButton.setText("暂停一下");//更改按键文字animationRun.start();//启动线程}else if (e.getActionCommand().equals("暂停一下")){jButton.setText("继续");animationRun.pause();//暂停线程}else if (e.getActionCommand().equals("继续")){jButton.setText("暂停一下");animationRun.restart();//重启线程}});}
这里需要说明的是,代码中直接把窗体创建在构造方法中,但是直接在构造方法中设置窗体只适用于线程较简单的程序,如果在正式的项目中,应该避免这种写法,因为swing是线程不安全的,应该对窗体单独建立窗体方法容器,例如:
public AnimationJFrame() {SwingUtilities.invokeLater(() -> {initUI();});}private void initUI() {//代码块...........}
创建绘图板
//创建绘图板class DrawCircleAndStar extends JLabel{@Overridepublic void paintComponent(Graphics g){//重写paintComponentsuper.paintComponent(g);//继承父类的构造方法Graphics2D graphics2D = (Graphics2D) g;graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//设置绘图抗锯齿//绘制圆形graphics2D.setColor(Color.RED);//设置填充颜色,红色graphics2D.fillOval(circleX,circleY,15,15);//设置圆形的位置和大小//绘制星型graphics2D.setColor(Color.BLUE);//设置填充色,蓝色//设置星型的属性int radius = 10;//设置星型的大小int[] xPoints = new int[10];//星型顶点的X坐标int[] yPoints = new int[10];//星型顶点的Y坐标//计算星型顶点的坐标及初始角度for (int i = 0; i < 10; i++) {double baseAngle = i * 2 * Math.PI / 10 + Math.PI / 2;//初始角度if (i % 2 == 0) {//外围顶点的坐标xPoints[i] = starX + (int) (radius * Math.cos(baseAngle));yPoints[i] = starY - (int) (radius * Math.sin(baseAngle));} else {//内部顶点的坐标xPoints[i] = starX + (int) (radius * Math.cos(baseAngle) * 0.5);yPoints[i] = starY - (int) (radius * Math.sin(baseAngle) * 0.5);}}Polygon star = new Polygon(xPoints, yPoints, 10);//绘制星型graphics2D.fillPolygon(star);//填充星型}}
创建绘图板,别的没有什么可说的,这里切记一点,无论绘图板继承自布局还是标签,相对的布局和标签是没有大小的,必须在窗体设置中,为它们设定尺寸,比如本代码中的
drawCircleAndStar.setBackground(new Color(0,0,0,0));//设置绘图标签的背景透明drawCircleAndStar.setSize(365,300);//设置绘图标签的大小
如果不设置大小,将无法将绘图板图形显示到容器
创建线程
//创建运行线程class AnimationRun extends Thread{boolean flag = false;//设置挂起标志synchronized void pause(){//暂停方法flag = true;}synchronized void restart(){//重启方法notifyAll();flag = false;}//重写run@Overridepublic void run(){//动画运行while (true) {//挂起区synchronized (this){while (flag){try {wait();//等待挂起} catch (InterruptedException e) {throw new RuntimeException(e);}}}//判断圆形运动方向if (circleX == 0) {circleXDirection = 1;} else if (circleX == 350) {circleXDirection = -1;}if (circleY == 0) {circleYDirection = 1;} else if (circleY == 285) {circleYDirection = -1;}//判断星型运动方向if (starX == 10){starXDirection = 1;}else if (starX == 355){starXDirection = -1;}if (starY == 10){starYDirection = 1;}else if (starY == 290){starYDirection = -1;}//设置绘图延迟try {Thread.sleep(10);} catch (InterruptedException e) {throw new RuntimeException(e);}//计算新的圆形位置和星型的位置circleX += circleXDirection;circleY += circleYDirection;starX += starXDirection;starY += starYDirection;//重绘绘图板drawCircleAndStar.repaint();}}}
synchronized
相对来说并不是最优的选择,消耗较高,建议优化,另外一个这里重写的不是paint
而是重写的paintComponent
因为重写paintComponent
只绘制图形主体,不会影响边框和背景,建议单独绘制元素的时候使用paintComponent
而不是paint
。
运行结果
完整代码
import javax.swing.*;
import java.awt.*;public class AnimationJFrame extends JFrame {//实例化属性private final DrawCircleAndStar drawCircleAndStar = new DrawCircleAndStar();//实例化图形绘制private final JButton jButton = new JButton();//实例化按钮private final AnimationRun animationRun = new AnimationRun();//实例化线程//设置绘图全局属性private int circleX = 0;//圆形的初始位置X坐标private int circleY = 10;//圆形的初始位置Y坐标private int circleXDirection = 1;//圆形运动X轴方向private int circleYDirection = 1;//圆形运动Y轴方向private int starX = 355;//星型的初始位置X坐标private int starY = 200;//星型的初始位置Y坐标private int starXDirection = 1;//星形运动X轴方向private int starYDirection = 1;//星形运动Y轴方向//构造方法构造窗体public AnimationJFrame(){//窗体基本设置Container conn = getContentPane();//建立窗体容器setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭方式setBounds(300,300,400,400);//设置窗体位置及大小setResizable(false);//窗体大小不可改变setLayout(null);//清空窗体布局管理器,不采用默认布局//创建动画布局JPanel jPanel = new JPanel();//实例化布局jPanel.setLayout(null);//清空布局的布局管理器,不采用默认布局jPanel.setBounds(10, 10, 365, 300);//动画布局的位置及大小jPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));//设置动画布局的边框jPanel.setBackground(Color.LIGHT_GRAY);//设置动画布局的底色//创建动画图形的标签容器JLabel jLabel = new JLabel();//实例化标签jLabel.setBounds(0,0,365,300);//设置动画标签的大小和位置//设置绘图标签drawCircleAndStar.setBackground(new Color(0,0,0,0));//设置绘图标签的背景透明drawCircleAndStar.setSize(365,300);//设置绘图标签的大小jLabel.add(drawCircleAndStar);//添加绘图板到标签jPanel.add(jLabel);//添加动画标签到动画布局//设置按键jButton.setText("开始");//设置按键显示文字jButton.setFont(new Font("黑体", Font.PLAIN, 14));//设置按键文字的字体jButton.setBounds(275, 320, 100, 22);//设置按键的位置和大小//添加原件到窗体容器conn.add(jPanel);//添加动漫布局到容器conn.add(jButton);//添加按钮到容器//给按钮添加监听jButton.addActionListener(e -> {if (e.getActionCommand().equals("开始")){jButton.setText("暂停一下");//更改按键文字animationRun.start();//启动线程}else if (e.getActionCommand().equals("暂停一下")){jButton.setText("继续");animationRun.pause();//暂停线程}else if (e.getActionCommand().equals("继续")){jButton.setText("暂停一下");animationRun.restart();//重启线程}});}//创建绘图板class DrawCircleAndStar extends JLabel{@Overridepublic void paintComponent(Graphics g){//重写paintComponentsuper.paintComponent(g);//继承父类的构造方法Graphics2D graphics2D = (Graphics2D) g;graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//设置绘图抗锯齿//绘制圆形graphics2D.setColor(Color.RED);//设置填充颜色,红色graphics2D.fillOval(circleX,circleY,15,15);//设置圆形的位置和大小//绘制星型graphics2D.setColor(Color.BLUE);//设置填充色,蓝色//设置星型的属性int radius = 10;//设置星型的大小int[] xPoints = new int[10];//星型顶点的X坐标int[] yPoints = new int[10];//星型顶点的Y坐标//计算星型顶点的坐标及初始角度for (int i = 0; i < 10; i++) {double baseAngle = i * 2 * Math.PI / 10 + Math.PI / 2;//初始角度if (i % 2 == 0) {//外围顶点的坐标xPoints[i] = starX + (int) (radius * Math.cos(baseAngle));yPoints[i] = starY - (int) (radius * Math.sin(baseAngle));} else {//内部顶点的坐标xPoints[i] = starX + (int) (radius * Math.cos(baseAngle) * 0.5);yPoints[i] = starY - (int) (radius * Math.sin(baseAngle) * 0.5);}}Polygon star = new Polygon(xPoints, yPoints, 10);//绘制星型graphics2D.fillPolygon(star);//填充星型}}//创建运行线程class AnimationRun extends Thread{boolean flag = false;//设置挂起标志synchronized void pause(){//暂停方法flag = true;}synchronized void restart(){//重启方法notifyAll();flag = false;}//重写run@Overridepublic void run(){//动画运行while (true) {//挂起区synchronized (this){while (flag){try {wait();//等待挂起} catch (InterruptedException e) {throw new RuntimeException(e);}}}//判断圆形运动方向if (circleX == 0) {circleXDirection = 1;} else if (circleX == 350) {circleXDirection = -1;}if (circleY == 0) {circleYDirection = 1;} else if (circleY == 285) {circleYDirection = -1;}//判断星型运动方向if (starX == 10){starXDirection = 1;}else if (starX == 355){starXDirection = -1;}if (starY == 10){starYDirection = 1;}else if (starY == 290){starYDirection = -1;}//设置绘图延迟try {Thread.sleep(10);} catch (InterruptedException e) {throw new RuntimeException(e);}//计算新的圆形位置和星型的位置circleX += circleXDirection;circleY += circleYDirection;starX += starXDirection;starY += starYDirection;//重绘绘图板drawCircleAndStar.repaint();}}}public static void main(String[] args) {new AnimationJFrame().setVisible(true);//启动程序}
}
相关文章:
Java一个简单的反弹动画练习
文章目录 说明代码详解创建窗体代码创建绘图板创建线程 运行结果完整代码 说明 做了一个小球和星型做反弹动画的窗体作为练习,分享给大家,为了方便和我一样的小白可以看的比较明白,所以尽量详细的标注了注释,希望能帮到同样在学习…...
互联网架构变迁:从 TCP/IP “呼叫” 到 NDN “内容分发” 的逐浪之旅
本文将给出关于互联网架构演进的一个不同视角。回顾一下互联网的核心理论基础产生的背景: 左边是典型的集中控制通信网络,很容易被摧毁,而右边的网络则没有单点问题,换句话说它很难被全部摧毁,与此同时,分…...
git push命令
git push 常用命令 1. 拉取远程仓库最新数据 使用 git fetch git fetch作用: 获取远程仓库的最新数据(包括分支、标签等),但不会修改本地工作目录。 结果: 仅更新远程分支(如 origin/main)的…...
day01-HTML-CSS——基础标签样式表格标签表单标签
目录 此篇为简写笔记下端1-3为之前笔记(强迫症、保证文章连续性)完整版笔记代码模仿新浪新闻首页完成审核不通过发不出去HTMLCSS1 HTML1.1 介绍1.1.1 WebStrom中基本配置 1.2 快速入门1.3 基础标签1.3.1 标题标签1.3.2 hr标签1.3.3 字体标签1.3.4 换行标…...
软考信安16~网络安全风险评估技术原理与应用
1、网络安全风险评估概述 1.1、网络安全风险评估概念 网络安全风险评估(简称“网络风险评估")就是指依据有关信息安全技术和管理标准,对网络系统的保密性、完整性、可控性和可用性等安全属性进行科学评价的过程,评估内容涉及网络系统的脆弱性、网络安全威胁以及脆弱性被…...
嵌入式C语言:二维数组
目录 一、二维数组的定义 二、内存布局 2.1. 内存布局特点 2.2. 内存布局示例 2.2.1. 数组元素地址 2.2.2. 内存布局图(简化表示) 2.3. 初始化对内存布局的影响 三、访问二维数组元素 3.1. 常规下标访问方式 3.2. 通过指针访问 3.2.1. 指向数…...
计算机网络期末复习(知识点)
概念题 在实际复习之前,可以看一下这个视频将网络知识串一下,以便更好地复习:【你管这破玩意叫网络?】 网络规模的分类 PAN(个人区域网络):用于个人设备间的连接,如手机与蓝牙耳机…...
LeetCode:3298. 统计重新排列后包含另一个字符串的子字符串数目 II(滑动窗口 Java)
目录 3298. 统计重新排列后包含另一个字符串的子字符串数目 II 题目描述: 实现代码与解析: 滑动窗口 原理思路: 3298. 统计重新排列后包含另一个字符串的子字符串数目 II 题目描述: 给你两个字符串 word1 和 word2 。 如果…...
【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述
前言 🌟🌟本期讲解关于spring aop的切面表达式和自身实现原理介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 &am…...
es 3期 第23节-运用Pipeline实现二转聚合统计
#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性ÿ…...
T-SQL语言的编程范式
T-SQL编程范式探析 引言 随着信息技术的迅猛发展,数据库在各个行业的应用日益广泛。在众多数据库管理系统中,SQL Server以其高性能和易用性受到广泛欢迎。T-SQL(Transact-SQL)是SQL Server的扩展版本,是一种用于查询…...
【ArcGIS微课1000例】0137:色彩映射表转为RGB全彩模式
本文讲述ArcGIS中,将tif格式的影像数据从色彩映射表转为RGB全彩模式。 参考阅读:【GlobalMapper精品教程】093:将tif影像色彩映射表(调色板)转为RGB全彩模式 文章目录 一、色彩映射表预览二、色彩映射表转为RGB全彩模式一、色彩映射表预览 加载配套数据包中的0137.rar中的…...
论文笔记(六十一)Implicit Behavioral Cloning
Implicit Behavioral Cloning 文章概括摘要1 引言2 背景:隐式模型的训练与推理3 隐式模型与显式模型的有趣属性4 policy学习成果5 理论见解:隐式模型的通用逼近性6 相关工作7 结论 文章概括 引用: inproceedings{florence2022implicit,titl…...
网络安全核心目标CIA
网络安全的核心目标是为关键资产提供机密性(Confidentiality)、可用性(Availablity)、完整性(Integrity)。作为安全基础架构中的主要的安全目标和宗旨,机密性、可用性、完整性频频出现,被简称为CIA,也被成为你AIC,只是顺序不同而已…...
hive迁移后修复分区慢,怎么办?
我有1个30TB的分区表,客户给的带宽只有600MB,按照150%的耗时来算,大概要迁移17小时。 使用hive自带的修复分区命令(一般修复分区比迁移时间长一点),可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增…...
一块钱的RISC-V 32位芯片
之前跟一个朋友聊天,说以后的芯片一定是越来越趋向于定制化,比如我们需要一个ADC芯片,这颗ADC芯片需要有串口功能,那就只开发一颗这样的芯片就好了,其他的功能都可以裁剪掉。 ➵➵➵➵➵➵➵➵➵➵➵➵➵➵➵…...
Linux常用指令
目录 1 概述2 指令2.1 简单指令2.2 解压缩2.2.1 tar.bz2和tar.gz2.2.2 单独bz22.2.3 zip2.2.4 7z 2.3 网卡操作 1 概述 本章主要是记录一些日常用到的Linux指令,方便自己忘记的时候查找,也为有需要的人提供参考。 2 指令 2.1 简单指令 指令解释cat /…...
车载音频开发(二):对音频数据作音量调节
通过前一个章节打下的基础车载音频开发(一):从看懂wav开始https://blog.csdn.net/Hellomino_/article/details/140873133?fromshareblogdetail&sharetypeblogdetail&sharerId140873133&sharereferPC&sharesourceHellomino_&…...
误差与误差限
目录 误差误差限小结 误差 设 x x x为准确值 , x ∗ ,x^* ,x∗为 x x x的一个近似值,称 e ∗ x ∗ − x e^*x^*-x e∗x∗−x为近似值的绝对误差,简称误差. 这样定义的误差 e ∗ e^{*} e∗可正可负,当绝对误差为正时近似值偏大,…...
halcon三维点云数据处理(七)find_shape_model_3d_recompute_score
目录 一、find_shape_model_3d_recompute_score例程代码二、set_object_model_3d_attrib_mod函数三、prepare_object_model_3d 函数四、create_cube_shape_model_3d函数五、获得CamPose六、project_cube_image函数七、find_shape_model_3d函数八、project_shape_model_3d函数 一…...
如何从串 ‘ 中国 +86‘ 中,获取到‘中国’:strip()、split()及正则表达式的使用
业务中有这样一个场景,国家列表中的数据格式是这样: 中国 86 ,其中的 "中国" 前面有3个空格,需要从中提取出 "中国",有哪些方法呢? 方法 1:使用 strip() 和 split() str…...
Java Web开发进阶——Spring Security基础与应用
Spring Security是Spring框架的核心模块之一,用于保护Web应用程序和微服务的安全。它提供强大的认证和授权功能,并与Spring生态系统无缝集成。本节将详细介绍Spring Security的基础知识及其在实际项目中的应用。 1. Spring Security概述与功能 1.1 什么…...
1. Doris分布式环境搭建
一. 环境准备 本次测试集群采用3台机器hadoop1、hadoop2、hadoop3, Frontend和Backend部署在同一台机器上,Frontend部署3台组成高可用,Backend部署3个节点,组成3副本存储。 主机IP操作系统FrontendBackendhadoop1192.168.47.128Centos7Foll…...
消息中间件类型介绍
消息中间件是一种在分布式系统中用于实现消息传递的软件架构模式。它能够在不同的系统或应用之间异步地传输数据,实现系统的解耦、提高系统的可扩展性和可靠性。以下是几种常见的消息中间件类型及其介绍: 1.RabbitMQ 特点: • 基于AMQP&#…...
Win10微调大语言模型ChatGLM2-6B
在《Win10本地部署大语言模型ChatGLM2-6B-CSDN博客》基础上进行,官方文档在这里,参考了这篇文章 首先确保ChatGLM2-6B下的有ptuning AdvertiseGen下载地址1,地址2,文件中数据留几行 模型文件下载地址 (注意࿱…...
C# GID+绘制不透明和半透明的线条
绘制线条时,必须将 Pen 对象传递给 DrawLine 类的 Graphics 方法。 Pen 构造函数的参数之一是 Color 对象。 若要绘制不透明的线条,请将颜色的 alpha 分量设置为 255。 若要绘制半透明的线条,请将 alpha 分量设置为从 1 到 254 的任何值。 在…...
解锁 C# 与 LiteDB 嵌入式 NoSQL 数据库
一、开篇:邂逅 C# 与 LiteDB 新世界 在当今的软件开发领域,数据管理如同建筑的基石,而选择一款合适的数据库则是项目成功与否的关键因素之一。对于 C# 开发者来说,面对琳琅满目的数据库选项,如何抉择常常令人头疼。今…...
iOS - 数组的真实类型
1. NSArray 类簇 // 1. __NSArray0 (空数组) NSArray *empty [];// 2. __NSArrayI (不可变数组) NSArray *immutable [1, 2, 3];// 3. __NSArrayM (可变数组) NSMutableArray *mutable [NSMutableArray array];// 4. __NSSingleObjectArrayI (单元素数组) NSArray *single …...
Unity热更新 之 Addressables(2) 本地/远端打包 流程测试
基础篇:Unity热更新 之 Addressables(1) 资源基础加载-CSDN博客 基础方法来源于唐老狮,我也是初学热更这一块,所有不保证步骤完全正确,如有不足还请斧正 目录 0.前提 1.本地打包 1.1.资源放入包 1.2.简化路径名称给出标签(如有需要的话) …...
Python标准库之SQLite3
包含了连接数据库、处理数据、控制数据、自定义输出格式及处理异常的各种方法。 官方文档:sqlite3 --- SQLite 数据库的 DB-API 2.0 接口 — Python 3.13.1 文档 官方文档SQLite对应版本:3.13.1 SQLite主页:SQLite Home Page SQL语法教程&a…...
php 使用simplexml_load_string转换xml数据格式失败
本文介绍如何使用php函数解析xml数据为数组。 <?php$a <xml><ToUserName><![CDATA[ww8b77afac71336111]]></ToUserName><FromUserName><![CDATA[sys]]></FromUserName><CreateTime>1736328669</CreateTime><Ms…...
Linux第二课:LinuxC高级 学习记录day01
0、大纲 0.1、Linux 软件安装,用户管理,进程管理,shell 命令,硬链接和软连接,解压和压缩,功能性语句,结构性语句,分文件,make工具,shell脚本 0.2、C高级 …...
Notepad++上NppFTP插件的安装和使用教程
一、NppFTP插件下载 图示是已经安装好了插件。 在搜索框里面搜NppFTP,一般情况下,自带的下载地址容易下载失败。这里准备了一个下载连接:Release v0.29.10 ashkulz/NppFTP GitHub 这里我下载的是x86版本 下载好后在nodepad的插件里面选择打…...
怎样提高服务器中的数据传输速度?
服务器中的数据传输速度会影响着用户的体验感,当企业中的数据传输速度出现卡顿或者是过慢时,用户不能及时浏览到所需的内容,给用户造成不好的体验感,那么企业该怎样才能提高服务器中的数据传输速度呢? 服务器之间如何传…...
Java聊天小程序
拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…...
Spring事件发布与监听
Spring事件机制详解:事件发布与监听 在Spring框架中,事件机制基于发布-订阅模式,允许组件之间进行解耦。发布者发布事件,监听者订阅并响应这些事件。Spring事件机制的核心在于ApplicationEvent和ApplicationListener,…...
【PPTist】公式编辑、插入音视频、添加动画
一、插入公式 点击公式的时候 latexEditorVisible 会变成 true src/views/Editor/CanvasTool/index.vue <Modalv-model:visible"latexEditorVisible" :width"880" ><LaTeXEditor close"latexEditorVisible false"update"data &…...
Dart语言的面向对象编程
Dart语言的面向对象编程 Dart是一种由谷歌开发的编程语言,主要用于构建Web、移动应用及服务器端应用。作为一门现代编程语言,Dart自带丰富的特性,尤其是在面向对象编程(Object-Oriented Programming, OOP)方面&#x…...
selenium+pyqt5自动化工具总结
说明:本工具是,操作外部google浏览器、selenium是无法操作qt界面中嵌套的浏览器的, 工具在后面 1. 代码结构 pycharm打开的文件下,再写一个子文件,文件导入的时候把子文件名带上 这样就可以在 外层使用命令 pyinst…...
Java 基于微信小程序的高校科研团队管理系统设计与实现(附源码,部署,文档
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
如何规模化实现完全自动驾驶?Mobileye提出解题“新”思路
在CES 2025上,Mobileye展示了端到端自动驾驶系统Mobileye Drive™,通过高度集成的传感器、算法和计算平台,可以实现自动驾驶功能的全覆盖。 Mobileye创始人兼首席执行官Amnon Shashua教授 期间,Mobileye创始人兼首席执行官Amnon …...
Vue2与Vue3在项目开发中的选择:深入探讨
文章目录 前言一、Vue2的优势与挑战二、Vue3的进步与特性三、如何做出选择?结语 前言 Vue.js 是一个用于构建用户界面的渐进式JavaScript框架。Vue2和Vue3是其两个主要版本,它们各自拥有一系列特点和优势。随着Vue3的发布,开发者们面临着在新…...
Git 操作与技巧
一、开发日常常用 Git 操作与技巧 1.1 基础操作 1.1.1 查看 Git 状态 git status:查看当前工作区的状态,了解哪些文件已经修改、哪些文件已经暂存。git status这个命令是最常用的命令之一,可以帮助你理解当前的开发状态,哪些文…...
vs2022开发.net窗体应用开发环境安装配置以及程序发布详细教程
文章目录 一、安装visual studio1.1推荐win10操作系统1.2推荐vs20221.3选择工作负载 二、新建基于.net的winform应用程序2.1为什么要.net 2.2 新建.net窗体应用2.2.1 选择Window窗体应用2.2.2 .net窗体对比framework窗体 三、发布.net应用 一、安装visual studio 1.1推荐win10…...
Mysql--基础篇--视图,存储过程,触发器
1、视图 MySQL视图(View)是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表&#…...
代码随想录 哈希 test 8
18. 四数之和 - 力扣(LeetCode) 与三数之和类似,重点在剪枝和去重的区别,由于target可正可负,因此需要分两种情况讨论,如果target为正,则若当前选择的元素之和大于target,需要跳出这…...
Postman接口测试基本操作
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Postman-获取验证码 需求:使用Postman访问验证码接口,并查看响应结果。 地址:http://kdtx-test.itheima.net/api/captchaIm…...
Three.js 渲染技术:打造逼真3D体验的幕后功臣
文章目录 前言一、着色器(Shaders)二、后处理(Post-processing)三、抗锯齿(Anti-aliasing)四、实时渲染与离线渲染五、光照模型与材质优化六、环境映射(Environment Mapping)七、纹理…...
uml活动图和用例图之间有一致性要求吗
UML(统一建模语言)中的活动图和用例图是两种不同的图表,它们用于描述软件系统的不同方面。尽管它们有不同的用途,但它们之间存在一定的一致性要求,以保证模型的有效性和准确性。 以下是活动图和用例图之间一致性要求的…...
嵌入式入门Day38
C Day1 第一个C程序C中的输入输出输出操作coutcin练习 命名空间使用方法自定义命名空间冲突问题 C对字符串的扩充C风格字符串的使用定义以及初始化C风格字符串与C风格字符串的转换C风格的字符串的关系运算常用的成员变量输入方法 布尔类型C对堆区空间使用的扩充作业 第一个C程序…...