实现动画的连续展示 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 stub
         water 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 block
			e.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线性表中

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot案例-部门管理-根据id查询

目录 根据页面原型&#xff0c;明确需求 查看接口文档 思路分析 接口功能实现 控制层&#xff08;Controller类&#xff09; 业务层&#xff08;Service类&#xff09; 业务类 业务实现类 持久层&#xff08;Mapper类&#xff09; 接口测试 前后端联调 根据页面原型&…

前端性能优化——包体积压缩插件,打包速度提升插件,提升浏览器响应的速率模式

前端代码优化 –其他的优化可以具体在网上搜索 压缩项目打包后的体积大小、提升打包速度&#xff0c;是前端性能优化中非常重要的环节&#xff0c;结合工作中的实践总结&#xff0c;梳理出一些 常规且有效 的性能优化建议 ue 项目可以通过添加–report命令&#xff1a; "…

开发过程中自己遇到的异常(四)

mysql 报错&#xff1a;‘Lost connection to MySQL server during query 出现这种情况大多是因为&#xff0c;两个事物抢一个表的使用权造成的。 show processlist; 观察Command 列&#xff0c;有明显的update&#xff0c;insert, delete 时间比较久的&#xff0c;直接kill掉…

【Mysql 连接报错】

文章目录 遇到问题查看用户信息修改加密规则成功连入mysql 遇到问题 socket: auth failed …/…/lualib/skynet/socketchannel.lua:482: errno:1251, msg:Client does not support authentication protocol requested by server; consider upgrading MySQL client,sqlstate:080…

SpringBoot 异步、邮件任务

异步任务 创建一个Hello项目 创建一个类AsyncService 异步处理还是非常常用的&#xff0c;比如我们在网站上发送邮件&#xff0c;后台会去发送邮件&#xff0c;此时前台会造成响应不动&#xff0c;直到邮件发送完毕&#xff0c;响应才会成功&#xff0c;所以我们一般会采用多线…

Kubernetes+EFK构建日志分析平台

目录 Elasticsearch产品介绍 Fluentd 工作原理 Kibana产品介绍 一、环境准备 1.1、主机初始化配置 1.2、部署docker环境 二、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安装master…

Spring-Bean的生命周期

目录 生命周期汇总 细分生命周期 1.实例化 2.属性赋值&#xff08;依赖注入&#xff09; 3.Aware接口 4.BeanPostProcessor接口 5.初始化 6.销毁 测试验证 类结构 业务类 测试类 生命周期汇总 Spring Bean 的生命周期见下图 &#xff08;一定记忆好下图&#x…

Maven之Servlet 版本问题

maven-archetype-webapp 骨架的 Servlet 版本问题 通过 maven-archetype-webapp 骨架去创建 java web 项目时&#xff0c;自动生成的 web.xml 配置文件所使用的 Servlet 的版本比较低&#xff08;2.3&#xff09;&#xff0c;而在低版本的 Servlet 中 EL 表达式默认是关闭的。…

【c语言】通讯录(动态版+文件+背景音乐)含源码

开饭了&#xff0c;之前写的通讯录&#xff0c;是否会有人觉得申请1000人的空间是不是有点用不上呀&#xff0c;怎么才能做到要多少申请多少个呢&#xff1f;&#xff1f;我们学完动态内存管理&#xff0c;和文件的相关操作&#xff0c;终于可以继续完善我们的通讯录了 船新版本…

解决 adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE

最近给游戏出包&#xff0c;平台要求 v1 签名吧&#xff0c;AS 打包后&#xff0c;adb 执行安装到手机&#xff0c;我用的设备是google pixel6 , android 系统 13&#xff0c; 提示如下&#xff1a; adb install -r v5_android_202308161046.apk Performing Streamed Install a…

kali linux查看局域网下所有IP,并对指定IP攻击

kali linux查看局域网下所有IP&#xff0c;并对指定IP实施局域网内攻击 首先我们打开我们熟悉的kali linux操作系统&#xff0c;利用指令&#xff1a; ifconfig来确认本机的ip地址 确认了本机的ip地址之后&#xff0c;利用一下的指令查看局域网下所有ip: fping -g 本机IP地址…

C# Linq源码分析之Take (三)

概要 本文在前两篇Take源码分析的基础上&#xff0c;着重分析Range参数中有倒数的情况&#xff0c;即分析TakeRangeFromEndIterator的源码实现。 源码及分析 TakeRangeFromEndIterator方法用于处理Range中的开始和结束索引存在倒数的情况。该方法位于Take.cs文件中。通过yie…

【Windows系统编程】06.HotFixHook与进程通信(详解HotFixHook)

上一讲讲到的InlineHook&#xff0c;每次Hook的时候&#xff0c;都要读写两次内存&#xff08;先Hook&#xff0c;再还原&#xff09;这种Hook方式&#xff0c;性能比较低&#xff0c;今天我们讲的这种Hook方式&#xff0c;可以说是InlineHook的升级版本 HotFix&#xff08;热…

[JavaWeb]【七】web后端开发-MYSQL

前言&#xff1a;MySQL是一种流行的关系型数据库管理系统,它的作用是存储和管理数据。在Web开发中,MySQL是必备的数据库技能之一,因为它可以帮助Web开发人员处理大量的数据,并且提供了强大的数据查询和管理功能。 一 数据库介绍 1.1 什么是数据库 1.2 数据库产品 二 MySQL概述…

NLPR、SenseTime 和 NTU 加速自动视频纵向编辑

视频人像编辑技术已经在电视、视频和电影制作中得到了应用&#xff0c;并有望在不断发展的网真场景中发挥关键作用。最先进的方法已经可以逼真地将同源音频合成为视频。现在&#xff0c;来自北京模式识别国家实验室&#xff08;NLPR&#xff09;、商汤科技研究和南洋理工大学的…

深度分析纳斯达克上市公司慧择的竞争优势和投资价值

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 一、保险行业的现状、竞争与机遇 在疫情期间&#xff0c;很多行业的经营理念与经营方式&#xff0c;甚至客户行为、客户需求都发生了变化&#xff0c;进而催生出新的机遇。保险行业亦是如此&#xff0c;受疫情影响&#xf…

借助 AI 工具,真的能成为 10x 工程师?

或许你听说过 10x 工程师吗&#xff1f; 如果你问猎头公司 10x 工程师是什么意思&#xff0c;他们可能会说 “生产力”&#xff01;10x 是指完成任务比别人快 10 倍的工程师。 2019 年&#xff0c;Twitter 上就曾经对 10 x 工程师这一议题有过一次空前热烈的讨论&#xff0c;引…

解决电脑声音正常但就是某些游戏没声音问题

电脑声音正常&#xff0c;玩普遍游戏也正常&#xff0c;就有游戏不出声音 详细介绍经过&#xff0c;不喜欢的请直接跳 第三部分。 一、先说下起因现象。 1 大富翁11 没声音。 前段时间无聊怀旧就买了个大富翁11玩玩&#xff0c;近二十年前的老台式机正常无问题。后来想在性能…

【网络编程(二)】NIO快速入门

NIO Java NIO 三大核心组件 Buffer&#xff08;缓冲区&#xff09;&#xff1a;每个客户端连接都会对应一个Buffer&#xff0c;读写数据通过缓冲区读写。Channel&#xff08;通道&#xff09;&#xff1a;每个channel用于连接Buffer和Selector&#xff0c;通道可以进行双向读…

Linux下Docker安装及卸载

文章目录 Linux下Docker安装及卸载1 Docker安装及卸载1.1 安装前准备1.2 安装docker软件2.4.3 启动docker2.2.4 测试2.2.5 卸载 Linux下Docker安装及卸载 1 Docker安装及卸载 官方网址&#xff1a;https://docs.docker.com/engine/install/centos/ 1.1 安装前准备 确定你是C…