当前位置: 首页 > news >正文

绘制动画及动画循环练习

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

   今天,我照着书上练习了一下用java做一个小球缓慢下落的动漫演示。它是由一个TetrisPanelL类和一个MyWindow类来完成的所有代码如下:

package Demo;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

import com.sun.prism.Image;

public class TetrisPanel extends JPanel implements Runnable{
	//绘图线程类
	public int ypos=-80;//小球左上角的纵坐标
	//在类中添加如下连个私有成员
	private Image iBuffer;
	private Graphics gBuffer;
	public TetrisPanel(){
		//新建一个新线程
		Thread t=new Thread(this);
		//启动线程
		t.start();
	}
	
	@Override
	public void paint(Graphics g) {
		// TODO Auto-generated method stub
		//super.paint(g);将面板上原来画的东西擦掉
		//先清屏否则原来画的东西仍在
		g.clearRect(0, 0, this.getWidth(), this.getHeight());
		g.setColor(Color.red);//设置小球颜色
		g.fillOval(90, ypos, 80, 80);//绘制小球
	}
	
	@Override
	public void run() {//重载run方法
		// TODO Auto-generated method stub
		while(true){//线程中的无限循环
			try{
				Thread.sleep(30);//线程休眠30秒
			}catch(InterruptedException e){
			}
			ypos+=5;//修改小球左上角的纵坐标
			if(ypos>=30)//小球离开窗口后重设左上角的纵坐标
				ypos=-80;
			repaint();//窗口重绘
		}
		
	}

}

 

package Demo;

import java.awt.Container;
import java.awt.event.WindowAdapter;

import javax.swing.JFrame;

import com.sun.glass.events.WindowEvent;

public class MyWindow extends JFrame{

	MyWindow(){
		this.setTitle("这是个测试窗口");
		Container c=this.getContentPane();//获得面板容器
		c.add(new TetrisPanel());
		//设置窗口开始显示时距离屏幕左边400个像素点
		//距离屏幕上边200个像素点
		this.setBounds(400,200,300,300);
		//设置窗口关闭按钮具有关闭整个程序功能
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建窗口的实例DB,开始整个程序
		MyWindow DB=new MyWindow();//创建主类对象
		DB.addWindowListener(new WindowAdapter() {//添加窗口关闭方法
			public void WindowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}

}

运行结果:

一个红色小球以一定速度从上往下掉落,当小球掉到底部时将循环继续从上往下掉,只要不关闭程序,小球就重复下落过程。

转载于:https://my.oschina.net/lizupei/blog/777572

相关文章:

  • Sublime插件支持Sass编译和Babel解析ES6 .sublime-build文件初探
  • SCCM 2016 + SQL 2016 + Win 2012 R2 安装教程
  • lduan server 2012证书服务角色分离(十七)
  • C#/VB.NET 获取电脑属性(硬盘ID、硬盘容量、Cpu序列号、MAC地址、系统类型)
  • 系统时间不对 导至不能正常上网
  • select into 与 insert into select
  • [CentOs7]iptables防火墙安装与设置
  • viewPager + fragment
  • 从内核文件系统看文件读写过程【转】
  • Jupiter的安装和使用
  • 【趣解编程】条件语句if
  • [OC]UILabel 文字长的截断方式
  • SqlServer基础系列——row_number() rank() dense_rank()SqlServer系列笔记
  • 项目管理文件夹模板
  • 网站开发之DIV+CSS简单布局网站入门篇(五)
  • [nginx文档翻译系列] 控制nginx
  • [译]如何构建服务器端web组件,为何要构建?
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【面试系列】之二:关于js原型
  • C++类中的特殊成员函数
  • css的样式优先级
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Golang-长连接-状态推送
  • JSDuck 与 AngularJS 融合技巧
  • leetcode讲解--894. All Possible Full Binary Trees
  • MySQL用户中的%到底包不包括localhost?
  • React Transition Group -- Transition 组件
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SpingCloudBus整合RabbitMQ
  • TypeScript迭代器
  • 爱情 北京女病人
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 初探 Vue 生命周期和钩子函数
  • 创建一个Struts2项目maven 方式
  • 基于遗传算法的优化问题求解
  • 聊一聊前端的监控
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 详解移动APP与web APP的区别
  • 小而合理的前端理论:rscss和rsjs
  • 智能网联汽车信息安全
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • ###C语言程序设计-----C语言学习(6)#
  • #HarmonyOS:Web组件的使用
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (LeetCode C++)盛最多水的容器
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (rabbitmq的高级特性)消息可靠性
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (四)JPA - JQPL 实现增删改查
  • (转) RFS+AutoItLibrary测试web对话框
  • ******之网络***——物理***