目录

一、效果

二、教程

三、代码


一、效果

首先我们先看效果,雪花是流动的,从上往下,依次变大,十分浪漫!(效果是动态的)

二、教程

1、使用IDEA搭建一个项目,项目名称:MyStar(可根据自己的喜好)

具体搭建过程可看博文用IDEA构建一个简单的Java程序范例,这里就不详细说了。

2、MyStar.class

(1)导入包

import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;

(2)主函数

在这里我的panel大小设置的是800*600,大家可以根据自己的喜好设置的更大一些。

public static void main(String[] args) {JFrame frame = new JFrame("满天星");MyStarPanel panel = new MyStarPanel();frame.add(panel);Thread t = new Thread(panel);t.start();frame.setSize(800, 600);frame.setVisible(true);frame.setLocationRelativeTo((Component)null);frame.setDefaultCloseOperation(3);frame.setBackground(Color.BLACK);}

3、 MyStarPanel.class

(1)导入包

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

(2)类的继承,接口的实现

  • JPanel类:面板组件,非顶层容器
public class MyStarPanel extends JPanel implements Runnable {}

(3)数据类型的定义

  • xx,yy:int,为雪花出现的坐标
  • image:BufferedImage,为图片类型
  • fonts:int,为雪花字体的大小
int[] xx = new int[100];
int[] yy = new int[100];
BufferedImage image;
int[] fonts = new int[100];

(4)画布函数MyStarPanel()

  • for循环:雪花出现的位置随机,一次出现100个

MyStarPanel.class.getResource("shu3.jpg"):获取图片的路径。

用法:类名.class.getResource("")

public MyStarPanel() {for(int i = 0; i < 100; ++i) {this.xx[i] = (int)(Math.random() * 800);this.yy[i] = (int)(Math.random() * 600);}try {this.image = ImageIO.read(MyStarPanel.class.getResource("shu3.jpg"));} catch (IOException var2) {var2.printStackTrace();}}

注:图片是我自己提前下载好的,并且放在 项目 -->  target --> classes --> MyStar

(5)画笔函数paint()

  • 画笔名称g
  • 雪花的颜色设置为白色
  • g.setColor(Color.WHITE);
  • for循环:设置雪花“*”的大小,字体。在这里,我们使雪花从上到下依次增大,使其更真实。
public void paint(Graphics g) {g.drawImage(this.image, 0, 0, 800, 600, (ImageObserver)null);g.setColor(Color.WHITE);for(int i = 0; i < 100; ++i) {Font ft = new Font("微软雅黑", 1, this.fonts[i]);g.setFont(ft);g.drawString("*", this.xx[i], this.yy[i]);}}

(6)线程函数run()

  • for循环:循环100次
  • 每次循环,yy[i] +1

1、判断边界:我们的画布大小为:800*600,超过100,令yy[i]=0

2、设定不同部分的雪花的大小。

在这里,我设置了三部分:

  • 0 - 150:font[i] = 18
  • 150 - 500:font[i] = 22
  • 500 - 600:font[i] = 32

这里大家可以根据自己的喜欢更改

public void run() {while(true) {for(int i = 0; i < 100; ++i) {int var1 = this.yy[i]++;if (this.yy[i] > 600) {this.yy[i] = 0;}if (this.yy[i] > 0 && this.yy[i] < 150) {this.fonts[i] = 18;} else if (this.yy[i] > 150 && this.yy[i] < 500) {this.fonts[i] = 22;} else {this.fonts[i] = 32;}}try {Thread.sleep(100);} catch (InterruptedException var2) {var2.printStackTrace();}this.repaint();}}
}

三、代码

1、MyStar.class

package MyStar;import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;public class MyStar {public static void main(String[] args) {JFrame frame = new JFrame("满天星");MyStarPanel panel = new MyStarPanel();frame.add(panel);Thread t = new Thread(panel);t.start();frame.setSize(800, 600);frame.setVisible(true);frame.setLocationRelativeTo((Component)null);frame.setDefaultCloseOperation(3);frame.setBackground(Color.BLACK);}
}

2、MyStarPanel.class

package MyStar;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;public class MyStarPanel extends JPanel implements Runnable {int[] xx = new int[100];int[] yy = new int[100];BufferedImage image;int[] fonts = new int[100];public MyStarPanel() {for(int i = 0; i < 100; ++i) {this.xx[i] = (int)(Math.random() * 800);this.yy[i] = (int)(Math.random() * 600);}try {this.image = ImageIO.read(MyStarPanel.class.getResource("shu3.jpg"));} catch (IOException var2) {var2.printStackTrace();}}public void paint(Graphics g) {g.drawImage(this.image, 0, 0, 800, 600, (ImageObserver)null);g.setColor(Color.WHITE);for(int i = 0; i < 100; ++i) {Font ft = new Font("微软雅黑", 1, this.fonts[i]);g.setFont(ft);g.drawString("*", this.xx[i], this.yy[i]);}}public void run() {while(true) {for(int i = 0; i < 100; ++i) {this.yy[i]++;if (this.yy[i] > 600) {this.yy[i] = 0;}if (this.yy[i] > 0 && this.yy[i] < 150) {this.fonts[i] = 18;} else if (this.yy[i] > 150 && this.yy[i] < 500) {this.fonts[i] = 22;} else {this.fonts[i] = 32;}}try {Thread.sleep(100);} catch (InterruptedException var2) {var2.printStackTrace();}this.repaint();}}
}

JAVA实现雪花飘落相关推荐

  1. JAVA实现雪花飘落动画效果

     效果如下:  步骤: 一.在项目中创建一个继承JFrame类的MainFrame窗体类.一个继承Jlable类,并实现Runnable接口的自定义标签类SnowFlakeLable及一个背景面板类B ...

  2. java之雪花飘落效果的实现(撩妹小程序)

    第一章:程序的思路分析 1.思路分析 程序采用面向对象的思想,包含主程序,面板类和雪花类. 主程序用来生成窗口,存放面板等作用. 面板类用来存放背景图片,存放生成的雪花对象,定时去刷新雪花的位置,形成 ...

  3. java实现物体下落效果_手撸一个物体下落的控件,实现雪花飘落效果

    效果图: 圣诞登录页.gif 参考文章: Android自定义View--从零开始实现雪花飘落效果 感谢原文作者,不仅实现了效果,并且写得非常详细,还做了优化.笔者参考原文作者的源码,做了一点修改,实 ...

  4. java实现下雪雪花飘落并堆积效果

    在一个800*600的画布上实现雪花飘落并在下方堆积的一个效果.实现方案是画两层雪花,一层是飘落的,一层是在下方不动并堆积的. 演示效果(黄色的是月亮): 代码: import java.awt.Co ...

  5. java飘落的雪花_[Java教程]实现雪花飘落效果

    [Java教程]实现雪花飘落效果 0 2016-11-02 21:00:17 雪花飘落 body{background:#000;background: url(http://www.wallcoo. ...

  6. java飘落的雪花_[Java教程]树叶飘落、雪花飘落等同时多个图片飘落

    [Java教程]树叶飘落.雪花飘落等同时多个图片飘落 0 2018-07-10 04:00:54 snowfall.jquery.js是树叶等图片飘落的插件,但是只支持一种图片的飘落效果,但是我遇到的 ...

  7. 雪花飞舞的java程序_jqmcsnow jquery圣诞节雪花飘落网页特效,配上了 树和雪景,在加上本效果实现的 飞 JavaScript 238万源代码下载- www.pudn.com...

    文件名称: jqmcsnow下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 146 KB 上传时间: 2014-09-28 下载次数: 0 详细说明:jquery ...

  8. 【表白系列二】Java实现的表白窗体应用~JFrame实现(雪花飘落)

    系列文章目录 [表白系列一]Java实现的表白窗体应用~JFrame实现(适合JFrame小白入门练习) [表白系列二]Java实现的表白窗体应用~JFrame实现(雪花飘落) 提示:写完文章后,目录 ...

  9. Android之雪花飘落效果

    Android之雪花飘落效果 一:效果图 二:实现步骤 1:FallObject 下落物体 封装 2:自定义雪花飘View 3:xml布局 4:activity使用 三:最后 一:效果图 Androi ...

最新文章

  1. 眠眠interview Question
  2. bash之预定义变量
  3. 抖音爬虫路上的填坑之路
  4. OpenTLD相关资料
  5. 【树莓派】Raspbian 中国软件镜像源
  6. SLAM会议笔记(二)Real-time DEMO
  7. 全世界都误会我们了。。。。。。。。
  8. rostcm6情感分析案例分析_情感分析师在线指导情感挽回
  9. android preference-headers 字体颜色,如何修改CheckBoxPreference 中title ,summary字体的颜色...
  10. com组件调用regsvr32的时候调试DllRegisterServer时候遇到的问题
  11. 令牌桶算法和漏桶算法python_如何实现漏桶算法与令牌桶算法
  12. 讲个职友集(jobui)低PV的故事(评论)
  13. Easy EDA #学习笔记04# |Type-C Micro USB APPLELighting 充电头
  14. linux 软链接 相对路径,Linux入门之ln命令创建软链接的绝对路径和相对路径详解(Ubuntu)...
  15. 从新一代TPU到Google.ai,详解谷歌I/O首日人工智能五大亮点
  16. 使用笔记:AWTK中文键盘按键字体加大
  17. 解密刷子是如何进行APP刷量的?
  18. 密码基础知识(3)---对称密码体制
  19. EMC组建BRS部门 让备份不再成为困扰
  20. 白平衡之完美反射算法

热门文章

  1. 【华为OD机试真题 Java】统计射击比赛成绩
  2. 富文本编辑器(超简单的)
  3. python三原色组合白色_为何色光三原色三三相加得到白色,这其中加色原理是如何起作用的?...
  4. Bluetooth sco协议录音
  5. 关于EasyDarwinGo部署海康威视rtsp转hls视频多摄像头的服务器视频转码
  6. php匹配字符串中的url并替换为超链接
  7. 【转】地心历险记 2:神秘岛 迅雷 下载 地址|神秘岛 高清 下载地址
  8. Cadence Allegro 过孔通孔盲孔埋孔详细说明及设计举例图文教程
  9. hzy 和zsl 的生存挑战
  10. 爱普生Epson Stylus Photo R260 打印机驱动