Java语言制作动画

 为了使制作出来的满天星更加好看,采用随机数产生,对于产生的位置采用二维数组进行定义、

为了使动画动起来,通过改变横纵坐标的大小来实现(写这篇的目的是为了证明Java不是枯燥无味的)

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.util.Random;

import javax.swing.JPanel;

/**
 * 画布类:JPanel
 * @author Administrator
 *
 */
public class MyJPanel extends JPanel implements Runnable{
	//定义50个星星的坐标
	int[] x=new int[70];
	int[] y=new int[70];
	//弹幕效果
	String[] strArr= {"皆是遗憾","想见你","巅峰相见"};
	int[] strx=new int[strArr.length];
	int[] stry=new int[strArr.length];
	//全局变量
	int x1=160;
	//构造方法
	public MyJPanel() {
		Random rand=new Random();//随机数
		for(int i=0;i<x.length;i++) {
			x[i]=rand.nextInt(1200);
			y[i]=rand.nextInt(600);
		}
		for(int i=0;i<strArr.length;i++) {
			strx[i]=rand.nextInt(1200);
			stry[i]=rand.nextInt(600);
		}
		new Thread(this).start();
	}
	//重写
	//Graphics g:画笔
	@Override
	public void paint(Graphics g) {
		// TODO Auto-generated method stub
		super.paint(g);
		//修改画布背景
		this.setBackground(Color.darkGray);
		g.setColor(Color.BLACK);
		Font font1=new Font("宋体",Font.BOLD,40);
		g.setFont(font1);
		g.drawString("予你姗姗而来", x1, 400);
		g.setColor(Color.BLACK);
		Font font2=new Font("楷体",Font.BOLD,40);
		g.setFont(font2);
		for(int i=0;i<strArr.length;i++) {	
			g.drawString(strArr[i], strx[i], stry[i]);
		}
		
		//画月亮
		g.setColor(Color.WHITE);
		g.fillOval(100, 100, 200, 200);
		g.setColor(Color.darkGray);
		g.fillOval(x1, 100, 200, 200);
		//画一颗星
		//代码格式化:ctrl+I ctrl+shift+F
		for(int i=0;i<x.length;i++) {
			//0-255
			int red=(int) (Math.random()*256);
			int green=(int) (Math.random()*256);
			int blue=(int) (Math.random()*256);
			Color color=new Color(red,green,blue); 
			g.setColor(color);//颜色
			Font font=new Font("宋体",Font.BOLD,10);
			g.setFont(font);
			g.drawString("*", x[i], y[i]);
		}


	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
//		System.out.println("嘿嘿");
		while(true) {
			x1=x1-2;
			if(x1<=0) {
				x1=1200;
			}
			for(int i=0;i<x.length;i++) {
				x[i]=x[i]-5;
				if(x[i]<=0)
					x[i]=1200;
			}
			for(int i=0;i<y.length;i++) {
				y[i]=y[i]-2;
				if(y[i]<=0)
					y[i]=600;
			}
			for(int i=0;i<strArr.length;i++) {
				stry[i]=stry[i]-2;
				if(stry[i]<=0)
					stry[i]=600;
			}
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			repaint();//重绘,重复调用paint方法
		}
	}
}
import javax.swing.JFrame;

/**
 * java swing:
 * 窗体类:JFrame
 * 
 */
public class MyJFrame extends JFrame{
	//构造方法:方法名与类名相同。没有任何返回值类型
	//作用:初始化
	public MyJFrame() {
		//this;指代当前类对象
		this.setTitle("所望星辰皆不是你");
		//设置窗体的宽和高
		this.setSize(1200, 600);
		//显示居中
		this.setLocationRelativeTo(null);
		//优化一下,退出窗体的时候,关闭进程
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//显示可见
		this.setVisible(true);
		//创建画布对象
		MyJPanel mj=new MyJPanel();
		//将画布添加到窗体上
		this.add(mj);
	}
	//主方法:程序的入口
	public static void main(String[] args) {
		new MyJFrame();
	}
}

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值