实现动画的连续展示 JAVA

目录

  • 1、前言:
  • 2、图片的展示以及自动关闭:
  • 3、动画的连续展示:

1、前言:

要实现动画的流畅展示需要在能展示图片的基础上对图片进行关闭,再切换下一张图片,这要关闭窗口,与延时函数以及while函数的配合使用


2、图片的展示以及自动关闭:

图片的展示以及关闭代码如下:

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubwater w = new water("C:\\Users\\86153\\Pictures\\Saved Pictures\\微信图片_20220211134809.jpg");try {Robot r = new Robot();r.delay(3000);} catch (AWTException e) {// TODO Auto-generated catch blocke.printStackTrace();}w.dispatchEvent(new WindowEvent(w, WindowEvent.WINDOW_CLOSING));//关闭窗口}}class water extends JFrame{//打印图片类water(String PATH){//图片大小设置this.setSize(1000, 1000);//手动关闭窗口程序自动结束this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//加载图片ImageIcon imageIcon = new ImageIcon(PATH);//创建的JLabel设置其图标为上方加载的图片JLabel label = new JLabel(imageIcon);//将label添加到窗口中this.getContentPane().add(label);//图片居中this.setLocationRelativeTo(null);//窗口显示this.setVisible(true);}
}

Java中使用frame.dispose()时,该行代码被标记了横线,可能是因为该方法被标记为过时方法(deprecated method)所以取而代之使用 w.dispatchEvent(new WindowEvent(w, WindowEvent.WINDOW_CLOSING));方法

3、动画的连续展示:

在这里插入图片描述
以上述图为例,理论上从0出发可以到达任意的其他三个点且有多种路径,若上述0,1,2,3分别代表一张图的话,配合随机数的生成理论上可以产生不同变换且流畅的动画

将上述图转成矩阵有路径的坐标分别为(0,1)、(1,3)、(1,2)、(2,3)、(2,0)、(3,0)
变换成01矩阵入下:
[
0,1,0,0
0,0,1,1
1,0,0,1
1,0,0,0
]
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.WindowEvent;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;public class Main {public static String path[] = {"C:\\Users\\86153\\Pictures\\Saved Pictures\\0.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\1.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\2.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\3.jpg"};public static void main(String[] args) {int index = 0;//初始化变量while(true) {//死循环int next = Math.abs(new Random().nextInt()) % 4;while(a[index][next] != 1) next = Math.abs(new Random().nextInt()) % 4;// System.out.println(index + " " + next);Water w = new Water(path[next]);index = next;try {new Robot().delay(500);//w.dispatchEvent(new WindowEvent(w, WindowEvent.WINDOW_CLOSING));//关闭窗口} catch (Exception e) { }} }public static int a[][] = {{0, 1, 0, 0},{0, 0, 1, 1},{1, 0, 0, 1},{1, 0, 0, 0}};
}class Water extends JFrame{//打印图片类Water(String PATH){//图片大小设置this.setSize(2000, 2000);//手动关闭窗口程序自动结束this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//加载图片ImageIcon imageIcon = new ImageIcon(PATH);//创建的JLabel设置其图标为上方加载的图片JLabel label = new JLabel(imageIcon);//将label添加到窗口中this.getContentPane().add(label);//图片居中this.setLocationRelativeTo(null);//窗口显示this.setVisible(true);}
}

能够切换但不够丝滑

优化代码:

import java.awt.FlowLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Robot;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;public class Main {public static String path[] = {"C:\\Users\\86153\\Pictures\\Saved Pictures\\0.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\1.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\2.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\3.jpg"};public static void main(String[] args) {int index = 0;//初始化变量Water w = new Water();while(true) {//死循环int next = Math.abs(new Random().nextInt()) % 4;while(a[index][next] != 1) next = Math.abs(new Random().nextInt()) % 4;// System.out.println(index + " " + next);w.Wate(path[next]);index = next;} }public static int a[][] = {{0, 1, 0, 0},{0, 0, 1, 1},{1, 0, 0, 1},{1, 0, 0, 0}};
}class Water extends JFrame{//打印图片类public 	JLabel label = new JLabel();public void Wate(String PATH){ //图片框大小设置//	setSize(2000, 1000);// 设置JFrame为全屏GraphicsDevice graphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();graphicsDevice.setFullScreenWindow(this);//手动关闭窗口程序自动结束setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//加载图片ImageIcon imageIcon = new ImageIcon(PATH);//创建的JLabel设置其图标为上方加载的图片label.setIcon(imageIcon);//更改图标setLayout(new FlowLayout(FlowLayout.CENTER));//调图像在框内位置//将label添加到框中add(label);try {new Robot().delay(300);} catch (Exception e) { }//窗口显示setVisible(true);}
}

全屏、且切换丝滑

代码:

import java.awt.FlowLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Robot;
import java.util.List;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.util.*;public class Main {public static String path[] = {"C:\\Users\\86153\\Pictures\\Saved Pictures\\0.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\1.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\2.jpg","C:\\Users\\86153\\Pictures\\Saved Pictures\\3.jpg"};public static List<ImageIcon> PATH = new ArrayList<ImageIcon>();public static void main(String[] args) {for(int i = 0; i < path.length; i ++) PATH.add(new ImageIcon(path[i]));int index = 0;//初始化变量Water w = new Water();while(true) {//死循环int next = Math.abs(new Random().nextInt()) % 4;while(a[index][next] != 1) next = Math.abs(new Random().nextInt()) % 4;// System.out.println(index + " " + next);w.Wate(PATH.get(next));index = next;} }public static int a[][] = {{0, 1, 0, 0},{0, 0, 1, 1},{1, 0, 0, 1},{1, 0, 0, 0}};
}class Water extends JFrame{//打印图片类public 	JLabel label = new JLabel();public void Wate(ImageIcon PATH){ //图片框大小设置//	setSize(2000, 1000);// 设置JFrame为全屏GraphicsDevice graphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();graphicsDevice.setFullScreenWindow(this);//手动关闭窗口程序自动结束setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//加载图片//ImageIcon imageIcon = new ImageIcon(PATH);//创建的JLabel设置其图标为上方加载的图片label.setIcon(PATH);//更改图标setLayout(new FlowLayout(FlowLayout.CENTER));//调图像在框内位置//将label添加到框中add(label);try {new Robot().delay(300);} catch (Exception e) { }//窗口显示setVisible(true);}
}

以空间换时间将图片解压提前放入List线性表中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/93924.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Grafana Prometheus 通过JMX监控kafka 【2023最新方式】

第三方kafka exporter方案 目前网上关于使用Prometheus 监控kafka的大部分资料都是使用一个第三方的 kafka exporter&#xff0c;他的原理大概就是启动一个kafka客户端&#xff0c;获取kafka服务器的信息&#xff0c;然后提供一些metric接口供Prometheus使用&#xff0c;随意它…

【C语言】回调函数,qsort排序函数的使用和自己实现,超详解

文章目录 前言一、回调函数是什么二、回调函数的使用1.使用标准库中的qsort函数2.利用qsort函数对结构体数组进行排序 三、实现qsort函数总结 先记录一下访问量突破2000啦&#xff0c;谢谢大家支持&#xff01;&#xff01;&#xff01; 这里是上期指针进阶链接&#xff0c;方便…

【GitLab私有仓库】如何在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透?

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…

数据结构单链表

单链表 1 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 在我们开始讲链表之前&#xff0c;我们是写了顺序表&#xff0c;顺序表就是类似一个数组的东西&#xff0…

UG NX二次开发(C#)-CAM-获取刀具类型

文章目录 1、前言2、UG NX中的刀具类型3、获取刀具类型3.1 刀具类型帮助文档1、前言 在UG NX的加工模块,加工刀具是一个必要的因素,其包括了多种类型的类型,有铣刀、钻刀、车刀、磨刀、成型刀等等,而且每种刀具所包含的信息也各不相同。想获取刀具的信息,那就要知道刀具的…

uniapp安卓ios打包上线注意事项

1、安卓包注意事项 隐私政策弹框提示 登录页面隐私政策默认不勾选隐私政策同意前不能获取用户权限APP启动时&#xff0c;在用户授权同意隐私政策前&#xff0c;APP及SDK不可以提前收集和使用IME1、OAID、IMS1、MAC、应用列表等信息 ios包注意事项 需要有注销账号的功能 3、安…

Octree八叉树python

原理 简单示例&#xff1a; 假设我们有以下一组三维点云数据&#xff1a; points [[0.1, 0.1, 0.1],[0.4, 0.1, 0.1],[0.1, 0.4, 0.1],[0.4, 0.4, 0.1],[0.1, 0.1, 0.4],[0.4, 0.1, 0.4],[0.1, 0.4, 0.4],[0.4, 0.4, 0.4], ] 我们可以使用八叉树将这些点云数据存储在三维空…

学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第八集:实现LED闪烁(下)

文章目录 2 函数的使用1.函数定义&#xff08;需要带类型&#xff09;2.函数声明&#xff08;需要带类型&#xff09;3.函数调用 3 新建文件&#xff0c;使用模块化编程新建xxx.c和xxx.h文件xxx.h格式&#xff1a;调用头文件验证代码调用&#xff1a;完整的文件结构如下&#x…

spring入门基本介绍及注入方式---详细介绍

一&#xff0c;spring的简介 Spring是一个开源框架&#xff0c;它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 提供了许多功能强大且易于使用的特性&#xff0c;使得开发者能够更加轻松地构建可维护且可扩展的应用程序&#xff0c;简单来说: Spring使用基…

内网穿透实战应用——【通过cpolar分享本地电脑上有趣的照片:发布piwigo网页】

通过cpolar分享本地电脑上有趣的照片&#xff1a;发布piwigo网页 文章目录 通过cpolar分享本地电脑上有趣的照片&#xff1a;发布piwigo网页前言1. 设定一条内网穿透数据隧道2. 与piwigo网站绑定3. 在创建隧道界面填写关键信息4. 隧道创建完成 总结 前言 首先在本地电脑上部署…

最新ChatGPT网站AI系统源码+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库/

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…

Linux学习之iptables的nat表

iptables -t nat 命令 规则链 规则是格式命令。 PREROUTING一般用于内网&#xff0c;用于目的地址转换。 POSTROUTING一般用于外网&#xff0c;用于源地址转换。 iptables -t nat -A PREROUTING -i eth0 -d 114.115.116.117 -p tcp --dport 80 -j DNAT --to-destination 10.0.0…

Docker基础入门:常规软件安装与镜像加载原理

Docker基础入门&#xff1a;常规软件安装与镜像加载原理 一、Docker常规软件安装1.1、部署nginx1.2、部署tomcat1.3、部署elasticsearch1.4、如何部署kibana-->连接elasticsearch1.5、部署可视化工具 二、 镜像加载原理2.1、镜像是什么2.2、Docker镜像加速原理2.3、分层理解…

HTTP--Request详解

请求消息数据格式 请求行 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1 请求头 客户端浏览器告诉服务器一些信息 请求头名称: 请求头值 常见的请求头&#xff1a; User-Agent&#xff1a;浏览器告诉服务器&#xff0c;我访问你使用的浏览器版本信息 可…

软件需求-架构师之路(五)

软件需求 软件需求&#xff1a; 指用户 对系统在功能、行为、性能、设计约束等方面的期望。 分为 需求开发 和 需求管理 两大过程。 需求开发&#xff1a; 需求获取需求分析需求定义&#xff08;需求规格说明书&#xff09;需求验证&#xff1a;拉客户一起评审&#xff0c…

Qt扫盲-Qt Paint System 概述

Qt Paint System 概述 一、概述二、绘图设备和后端1. Widget2. Image3. Pixmap4. OpenGL绘制设备5. Picture6. 自定义绘制后端 三、绘图与填充1. Drawing2. 填充 Filling 四、坐标系统1. 渲染Window-Viewport转换 五、读写图像文件1. QMovie 六、绘图相关设备 一、概述 Qt的pa…

时序预测 | MATLAB实现基于CNN-LSTM卷积长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-LSTM卷积长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-LSTM卷积长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 MATLAB实现基…

《内网穿透》无需公网IP,公网SSH远程访问家中的树莓派

文章目录 前言 如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地…

docker私有仓库harbor

一、安装docker-compose yum install docker-compose -y 二、下载harbor安装包 tar -xf harbor-online-installer-v2.1.0.tgz cp harbor.yml.tmpl harbor.yml 三、修改harbor配置 [rootharbor ~]# vim harbor.ymlhostname: "修改为本机ip" harboradminpassword:…

Linux学习之基本指令一

在学习Linux下的基本指令之前首先大家要知道Linux下一切皆目录&#xff0c;我们的操作基本上也都是对目录的操作&#xff0c;这里我们可以联想我们是如何在windows上是如何操作的&#xff0c;只是形式上不同&#xff0c;类比学习更容易理解。 目录 01.ls指令 02. pwd命令 0…