MySnow


  • 刚学了Java的GUI,实现了一下老师上课讲的一个程序.

​
//package wordClear;
import java.util.*;
import javax.swing.*;//用到了这个包里的JFrame和JPanel,这俩是分别继承Frame和Panel的
import java.awt.*;//这个包是拿来实现Frame和Panel的,当然这个程序我用不到这个包

public class MySnow
{
	static Scanner sc=new Scanner(System.in);
	public static void main(String[]args)
	{
		JFrame F=new JFrame("MySnow");//显示窗口
		F.setVisible(true);//让窗口可关闭,Frame的关闭很难写,所以用了JFrame
		F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体位置,大小
		F.setBounds(50,50,600,400);//设置窗口大小不可改变
		F.setResizable(false);//设置窗口背景颜色为黑色
		F.setBackground(Color.BLACK);
		MyPanel M=new MyPanel();
		F.add(M);
		Thread T=new Thread(M);
		T.start();
	}
}
/**
**下面这段代码就是实现了画布MyPanel,
**该'画布'继承了JPanel并且实现了多线程Runnable接口中的run()方法
*/
class MyPanel extends JPanel implements Runnable
{
	int[] x=new int[200];
	int[] y=new int[200];
	MyPanel()//用构造函数来随机生成200个雪花的坐标
	{
		for(int i=0;i<200;i++)
		{
			x[i]=new Random().nextInt(600);
			y[i]=new Random().nextInt(1200);//这个纵坐标是整个界面的三倍,原因是不想一轮循环后雪花重复
		}
	}
	public void paint(Graphics G)//paint方法,用来生成雪花形状
	{
        /**
        **JPanel相对Panel来说有一个不好的地方,不能自行覆盖
        **为什么不好,注释掉下面两行自行体会,下面这个东西是弥补缺陷的
        */
		G.setColor(Color.BLACK);
		G.fillRect(0, 0, 600, 400);
		G.setColor(Color.WHITE);
		for(int i=0;i<200;i++)
			G.fillOval(x[i], y[i], 5, 5);
	}
	public void run()//实现多线程,不用到多线程的话,我现在还不知道要怎么实现让雪花动起来这个操作
	{
		while(true)
		{
			for(int i=0;i<200;i++)//更新雪花坐标,每次线程运行就更新一次,实现让雪花看着像动起来
			{
				if(y[i]==1200)//雪花触碰到三倍高度的底把该雪花y坐标移回顶部
					y[i]=5;
				y[i]+=1;
			}
			try//try和catch是处理异常
			{
				Thread.sleep(10);
			}
			catch(InterruptedException e)
			{
				e.printStackTrace();
			}
			repaint();//重画雪花
		}
	}
}

​

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值