JAVA Timer实现动画(月食)

用随机数函数点缀星空,画布画出两个圆,背景设置black,圆重叠实现月食效果 Timer打断再用repaint重画

package animation;

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.URI;
import java.net.URL;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.Timer;


public class MoonJFrame extends JFrame {
	private MoonCanvas canvas;
	
	File f;
	URI uri;
	URL url;
	public void Music(){
		try{
			this.f=new File("Faded.wav");
			uri=f.toURI();
			url=uri.toURL();//解析地址
			AudioClip aau;
			aau=Applet.newAudioClip(url);
			aau.loop();
			}catch(Exception e){e.printStackTrace();}
	}
	public MoonJFrame(){
		super("MOON");
		Dimension dim=getToolkit().getScreenSize();
		this.setBounds(dim.width/4,dim.height/4,dim.width/2,dim.height/2);
		setLocationRelativeTo(null);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.canvas=new MoonCanvas();
		canvas.setBackground(Color.black);
		this.getContentPane().add(this.canvas,"Center");
		this.setVisible(true);
		this.Music();
	}
	public static void main(String[] args) {
		new MoonJFrame();
	}
}
class MoonCanvas extends Canvas implements ActionListener{
	private Moon moon;
	private Timer timer;
	private static class Moon{
		int x;
		public boolean move;
		Moon(int x){
			this.x=x;
			boolean move=false;
		}
	}
		public MoonCanvas(){
			this.moon=new Moon(400);
			timer=new Timer(500,this);
			timer.start();
		}
	public void paint(Graphics g){
		int x=this.getWidth();
		int y=this.getHeight();
		g.setColor(Color.white);
		for(int i=0;i<100;i++){
		g.fillOval(new Random().nextInt(1000),new Random().nextInt(1000),5,5);
		}
		g.fillOval(300,80,100,100);
		g.setColor(Color.black);
		g.fillOval(moon.x,80,100,100);
		moon.x=moon.move?moon.x+10:moon.x-10;
		if(moon.x>=400||moon.x<=200){
			moon.move=!moon.move;
		}
	}
	public void actionPerformed(ActionEvent ev){
		repaint();
	}
}

效果图

音乐伴奏自选
在这里插入图片描述

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值