JAVA实现雪花飘落
目录
一、效果
二、教程
三、代码
一、效果
首先我们先看效果,雪花是流动的,从上往下,依次变大,十分浪漫!(效果是动态的)
二、教程
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实现雪花飘落相关推荐
- JAVA实现雪花飘落动画效果
效果如下: 步骤: 一.在项目中创建一个继承JFrame类的MainFrame窗体类.一个继承Jlable类,并实现Runnable接口的自定义标签类SnowFlakeLable及一个背景面板类B ...
- java之雪花飘落效果的实现(撩妹小程序)
第一章:程序的思路分析 1.思路分析 程序采用面向对象的思想,包含主程序,面板类和雪花类. 主程序用来生成窗口,存放面板等作用. 面板类用来存放背景图片,存放生成的雪花对象,定时去刷新雪花的位置,形成 ...
- java实现物体下落效果_手撸一个物体下落的控件,实现雪花飘落效果
效果图: 圣诞登录页.gif 参考文章: Android自定义View--从零开始实现雪花飘落效果 感谢原文作者,不仅实现了效果,并且写得非常详细,还做了优化.笔者参考原文作者的源码,做了一点修改,实 ...
- java实现下雪雪花飘落并堆积效果
在一个800*600的画布上实现雪花飘落并在下方堆积的一个效果.实现方案是画两层雪花,一层是飘落的,一层是在下方不动并堆积的. 演示效果(黄色的是月亮): 代码: import java.awt.Co ...
- java飘落的雪花_[Java教程]实现雪花飘落效果
[Java教程]实现雪花飘落效果 0 2016-11-02 21:00:17 雪花飘落 body{background:#000;background: url(http://www.wallcoo. ...
- java飘落的雪花_[Java教程]树叶飘落、雪花飘落等同时多个图片飘落
[Java教程]树叶飘落.雪花飘落等同时多个图片飘落 0 2018-07-10 04:00:54 snowfall.jquery.js是树叶等图片飘落的插件,但是只支持一种图片的飘落效果,但是我遇到的 ...
- 雪花飞舞的java程序_jqmcsnow jquery圣诞节雪花飘落网页特效,配上了 树和雪景,在加上本效果实现的 飞 JavaScript 238万源代码下载- www.pudn.com...
文件名称: jqmcsnow下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 146 KB 上传时间: 2014-09-28 下载次数: 0 详细说明:jquery ...
- 【表白系列二】Java实现的表白窗体应用~JFrame实现(雪花飘落)
系列文章目录 [表白系列一]Java实现的表白窗体应用~JFrame实现(适合JFrame小白入门练习) [表白系列二]Java实现的表白窗体应用~JFrame实现(雪花飘落) 提示:写完文章后,目录 ...
- Android之雪花飘落效果
Android之雪花飘落效果 一:效果图 二:实现步骤 1:FallObject 下落物体 封装 2:自定义雪花飘View 3:xml布局 4:activity使用 三:最后 一:效果图 Androi ...
最新文章
- 眠眠interview Question
- bash之预定义变量
- 抖音爬虫路上的填坑之路
- OpenTLD相关资料
- 【树莓派】Raspbian 中国软件镜像源
- SLAM会议笔记(二)Real-time DEMO
- 全世界都误会我们了。。。。。。。。
- rostcm6情感分析案例分析_情感分析师在线指导情感挽回
- android preference-headers 字体颜色,如何修改CheckBoxPreference 中title ,summary字体的颜色...
- com组件调用regsvr32的时候调试DllRegisterServer时候遇到的问题
- 令牌桶算法和漏桶算法python_如何实现漏桶算法与令牌桶算法
- 讲个职友集(jobui)低PV的故事(评论)
- Easy EDA #学习笔记04# |Type-C Micro USB APPLELighting 充电头
- linux 软链接 相对路径,Linux入门之ln命令创建软链接的绝对路径和相对路径详解(Ubuntu)...
- 从新一代TPU到Google.ai,详解谷歌I/O首日人工智能五大亮点
- 使用笔记:AWTK中文键盘按键字体加大
- 解密刷子是如何进行APP刷量的?
- 密码基础知识(3)---对称密码体制
- EMC组建BRS部门 让备份不再成为困扰
- 白平衡之完美反射算法
热门文章
- 【华为OD机试真题 Java】统计射击比赛成绩
- 富文本编辑器(超简单的)
- python三原色组合白色_为何色光三原色三三相加得到白色,这其中加色原理是如何起作用的?...
- Bluetooth sco协议录音
- 关于EasyDarwinGo部署海康威视rtsp转hls视频多摄像头的服务器视频转码
- php匹配字符串中的url并替换为超链接
- 【转】地心历险记 2:神秘岛 迅雷 下载 地址|神秘岛 高清 下载地址
- Cadence Allegro 过孔通孔盲孔埋孔详细说明及设计举例图文教程
- hzy 和zsl 的生存挑战
- 爱普生Epson Stylus Photo R260 打印机驱动