java 下雪_如何用JAVA实现下雪场景

看到这个题目,希望大家不要慌忙,从字面上很容易就能看出,我们要用到JFrame框架,然后需要在Frame里面添加雪花,最后让雪花移动起来。

下面我们来具体分析一下:

首先,我们需要有一个JFrame类,用来加载面板以及运行主方法;

第二,我们需要有一个JPanel类,将雪花加载上去。

第三,需要实现雪花的移动。

如何实现这三个功能呢?带着问题,我们来看下面的代码:

MyStarFrame类:

import javax.swing.JFrame; /** * 首先我们来创建JFrame类,这个类我们把它称作MyStarFrame, * 包含一个主方法跟两个成员方法。 * @author ChrisYuan * */ public class MyStarFrame extends JFrame{ /* * 定义一个成员变量panel,这里我们使用私有属性, * 为了避免其他类不小心调用它,防止程序出错。 * 很多时候,如果我们不知道属性该定义为什么,最好定义为私有。 */ private SnowPanel panel; /* * addPanel方法,将另一个类也就是我们提到的panel类加载进来。 */ public void addPanel(){ panel=new SnowPanel(); this.add(panel);//使用this加到frame框架里,在这里this代表的是当前的frame对象 panel.startDown();//调用panel的startDown方法,实现雪从天而降 } /* * showMe方法,其实就是将框架显示出来的方法,里面我们定义了几个常用的方. */ public void showMe(){ this.setSize(800,600);//设置框架大小 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置框架在点击右上角关闭按钮的时候会从系统中关闭完全关闭退出 this.setTitle("下雪场景实现");//设置框架标题 this.setVisible(true);//设置框架可见性为真,让框架显示出来。 } /** * 主方法新建了一个frame对象,然后调用了它的addPanel根showMe方法 * @param args */ public static void main(String[] args) { MyStarFrame frame = new MyStarFrame(); frame.addPanel(); frame.showMe(); } }

SnowPanel类:

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import javax.swing.JPanel; /** * SnowPanel类继承于面板类,里面添加的是下雪动作的具体实现。 * @author ChrisYuan */ public class SnowPanel extends JPanel{ //定义了两个整型数组,数组里分别存放雪花在面板里的x、y轴的值 private int[] xx; private int[] yy; //定义一个字体数组,目的是为了后面定义雪花的时候,让雪花有大小的变化 private Font[] fs; /* * 下面是panel类构造器,在frame类里面new panel对象的时候, * 构造方法里面的属性与方法都会执行或加载。 */ public SnowPanel(){ xx=new int[300]; yy=new int[300]; //循环300次,产生300组随机数,保存在xx和yy数组中 for (int i = 0; i < xx.length; i++) { xx[i]=(int)(Math.random()*800); yy[i]=(int)(Math.random()*600); } fs=new Font[10]; //循环10次,产生一种不同大小的字体,保存在fs中 for(int i=0;i=600){ yy[i]=0; } } //重画面板动作,意味将位移的雪花重新显现出来 repaint(); //异常处理里面的语句是让线程停滞10毫秒,保证雪花下降的速度没有那么快 try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }//while end! }// run end! }.start();//线程要运行,一定要用start方法来开启线程 } }

注:初学Java,代码难免粗糙,欢迎大家指正~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值