14. 114. 5. Timer 基本动画based animation

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class TimerBasedAnimation extends JPanel implements ActionListener{
	private Ellipse2D.Float ellipse = new Ellipse2D.Float();//一个精细的椭圆
	private double esize;
	private double maxSize = 0;
	private boolean initialize = true;//initialize:初始化
	
	Timer timer;
	ActionListener updateProBar;
	
	public TimerBasedAnimation(){
		setXY(20*Math.random(),20,20);
		timer = new Timer(20,this);
		timer.setInitialDelay(1900);//设置 Timer 的初始延迟  190毫秒
		timer.start();
	}
	
	public void setXY(double size,int w, int h){//设置xy点
		esize = size;
		//将此 Shape 窗体矩形的位置和大小设置为指定的矩形值。
		/*
		x - 指定矩形左上角的 X 坐标
		y - 指定矩形左上角的 Y 坐标
		w - 指定矩形的宽度
		h - 指定矩形的高度
		*/
		ellipse.setFrame(10,10,size,size);
	}
	
	public void reset(int w, int h){//重启方法
		maxSize = w;
		setXY(maxSize*Math.random(),w,h);
	}
	
	public void step(int w,int h){//设置步骤
		esize++;
		if(esize>maxSize){
			setXY(1,w,h);
		}else{
			ellipse.setFrame(ellipse.getX(),ellipse.getY(),esize,esize);
		}
	}
	
	public void render(int w,int h,Graphics2D g2){
		g2.setColor(Color.green);
		g2.draw(ellipse);
		
	}
	
	public void paint(Graphics g){
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D)g;
		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
													RenderingHints.VALUE_ANTIALIAS_ON);
		rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
		g2.setRenderingHints(rh);
		Dimension size = getSize();
		
		if(initialize){//假如为真
			reset(size.width,size.height);
			initialize = false;
		}
		this.step(size.width, size.height);
		render(size.width, size.height, g2);
	}
	
	public void actionPerformed(ActionEvent e) {
		repaint();
    }
	
	public static void main(String[] args) {
		JFrame frame = new JFrame("TimerBasedAnimation");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(new TimerBasedAnimation());
		frame.setSize(350, 250);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值