文章目录

  • 需求分析
  • 设计思路
  • 设计实现
  • 设计展示
  • 欢迎留言评论点赞

需求分析

  • 目的是实现一个基于Java多线程和图形界面设计的雪花飞舞(飘雪花)效果,附带背景图及背景音乐。
  • 需要理解Java基础、Java多线程、lambda表达式、Java图形界面设计等。

设计思路

  1. 设计实现雪花类
  2. 设计实现音乐播放类
  3. 设计实现飘雪花主界面类

设计实现

  1. 雪花飞舞项目结构:
  2. 雪花类的设计实现:雪花是一个JLable标签,其setIcon()方法可以给标签打上图片,而且我们需要透明图片以免遮盖界面背景,所以我们继承JLable类,然后实现功能,功能就是从界面上端飘落至下端,我们使用JLabel类自带的setLocation(x,y)方法即可实现,而隔一段时间向下坠落就需要用到Java Timer(定时器类),启动一次定时器就相当于启动了一个线程。
package snow56;import java.util.Random;
import java.awt.AWTException;
import java.awt.Point;
import java.awt.Robot;import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.Timer;public class Snow extends JLabel{Timer timer;public Snow() {this.setSize(50, 50);Random random=new Random();int op=random.nextInt(3);if(op==0) {this.setIcon(new ImageIcon("src//snow.png"));}else if(op==1) {this.setIcon(new ImageIcon("src//snow1.png"));}else {this.setIcon(new ImageIcon("src//snow3.png"));}}public Snow(String name) {this.setText(name);this.setSize(50, 50);this.setIcon(new ImageIcon("src//snow.png"));}public void setFirstLocation() {Random random=new Random();
//      Point p=new Point(random.nextInt(500), 0);     this.setLocation(random.nextInt(700), 0);       }public void snowflaskesFall(){Random random=new Random();int op=random.nextInt(3);   timer=new Timer(50,event->{if(this.getLocation().getY()!=450) {if(op==0) {this.setLocation(this.getLocation().x, this.getLocation().y+3);}else if(op==1) {this.setLocation(this.getLocation().x-1, this.getLocation().y+1);              }else {this.setLocation(this.getLocation().x+2, this.getLocation().y+5);}}else {timer.stop();
//              super.setLocation(super.getLocation().x, 450);}});timer.start();}}
  1. 播放音乐类的实现:实现音乐播放功能需要使用别人封装好的播放音乐jar,我们调用一下即可,播放音乐应单独启动一个线程,所以此类应该继承一个Thread
package snow56;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.*;
/**** 音乐播放器类* @author*  time*///继承自线程类Thread
public class AudioPlayer extends Thread{Player player;File music;//构造方法public AudioPlayer(File file) {this.music = file;}//重写run方法@Overridepublic void run() {super.run();try {play();     } catch (FileNotFoundException | JavaLayerException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//播放方法public void play() throws FileNotFoundException, JavaLayerException {BufferedInputStream buffer =new BufferedInputStream(new FileInputStream(music));player = new Player(buffer);player.play();}
}
  1. 主界面的设计实现:主界面继承自JFrame,JFrame设置背景图片,JFrame分为三层,我们需要将第二层贴上背景图片,其上层设置为透明即可,然后就是定时产生一个雪花,雪花内置定时器,落至“地面”即停止。

    • JFrame窗口最底层是JRootPane面板,jrootpane中包含glasspane和layeredpane两个面板。而layeredpane面板包含contentpane和jmenubar。在jframe上添加组件,往往是添加在contentpane中。。但是在contentpane的下面还有两层面板,那就是layeredpane和jrootpane。 我们将LayeredPane层贴上背景图片再加以处理即可。
package snow56;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Event;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.io.File;
import java.util.ArrayList;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.border.EmptyBorder;public class SnowJFrame extends JFrame {private JPanel contentPane;   private JPanel imagePanel; private ImageIcon background;/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {SnowJFrame frame = new SnowJFrame();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public SnowJFrame() {setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 600, 600);background = new ImageIcon("src//bj1.jpg");// 背景图片JLabel label = new JLabel(background);// 把背景图片显示在一个标签里面// 把标签的大小位置设置为图片刚好填充整个面板label.setBounds(0, 0, background.getIconWidth(),background.getIconHeight());// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明imagePanel = (JPanel) this.getContentPane();imagePanel.setOpaque(false);// 内容窗格默认的布局管理器imagePanel.setLayout(new FlowLayout());this.getLayeredPane().setLayout(null);// 把背景图片添加到分层窗格的最底层作为背景this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(background.getIconWidth(), background.getIconHeight());this.setResizable(false);this.setVisible(true);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));contentPane.setLayout(new BorderLayout(0, 0));setContentPane(contentPane);contentPane.setOpaque(false);File f=new File("src//Richard Clayderman - Pour Else.mp3");
//      File f=new File("src//Bandari - 仙境.mp3");new AudioPlayer(f).start();//ArrayList<Snow> snow=new ArrayList<>();Timer timer = new Timer(500,event->{           Snow snow=new Snow();contentPane.add(snow);snow.setFirstLocation();snow.snowflaskesFall();
//          snow.disappear();}); timer.start(); }}
  1. 代码仓库: 代码上传至我的GitHub仓库。

设计展示

  • 效果如图:

欢迎留言评论点赞

Java雪花飞舞设计实现相关推荐

  1. c语言课程设计雪花飞舞,雪花飞舞--c语言课程设计.doc

    雪花飞舞--c语言课程设计 PAGE 计算机技术基础课程设计 C语言 设计报告 题目:雪花飞舞 一.选题背景: 问题的提出:我们在编制各种flash动画设计时,经常会用到风雪的背景,为此编制几个函数对 ...

  2. java雪花纷飞_分析自定义view的实现过程-实现雪花飞舞效果(转载有改动)

    声明:本文源码出自实现雪花飞舞效果(有改动)主要通过这篇文来分析自定义view的实现过程. 没事时,比较喜欢上网看看一些新的东西,泡在网上的日子就是一个很不错的网站. 下面开始了,哈哈.^_^ 大家都 ...

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

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

  4. java雪花纷飞_jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享

    这是一款基于jquery实现的漫天雪花飞舞的圣诞祝福雪花效果代码,雪花的大小可以进行切换,用户还可以更改背景图片,是一款非常实用的幻灯片特效源码. 漫天雪花飞舞的jquery圣诞祝福雪花效果,集中不同 ...

  5. java雪花纷飞_下雪了 javascript实现雪花飞舞

    本文实例为大家分享了雪花飞舞效果javascript实现,供大家参考,具体内容如下 原理: 1.js动态创建DIV,指定CLASS类设置不同的背景图样式显示不同的雪花效果. 2.js获取创建的DIV并 ...

  6. 谈谈Java接口Result设计

    这篇文章酝酿了很久,一直想写,却一直觉得似乎要讲的东西有点杂,又不是很容易讲清楚,又怕争议的地方很多,就一拖再拖.但是,每次看到不少遇到跟这个设计相关导致的问题,又忍不住跟人讨论,但又很难一次说清楚, ...

  7. 高性能 Java 应用层网关设计实践

    前言 上文我们简单阐述了一下接入层网关的实现原理 不少人对 Java 网关的实现也比较感兴趣,所以这篇文章我们来简单谈谈 Java 应用网关设计,本文将会从以下几个方面来阐述 Java 应用层网关的设 ...

  8. java界面设计素材_9.java图形用户界面设计.ppt

    9.java图形用户界面设计.ppt 还剩 150页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 151v 程 ...

  9. Java异常处理和设计

    Java异常处理和设计 在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常 ...

最新文章

  1. 使用VMware Infrastructure Client中的VMware Server 2.0.x的管理
  2. 每日一皮:从头发数量看一个编程语言的行业地位...
  3. CloudStack无法添加模板和iso
  4. NLP《词汇表示方法(三)word2vec》
  5. 北大提出Gate Decorator,利用LSTM思想来做CNN剪枝
  6. GitHub的常用命令---终端操作
  7. 人脸方向学习(二):人脸质量评价-质量判断总结
  8. oracle 误删表数据,还原到某个时间点
  9. Python学习七文件和数据格式化
  10. 数字和ASII码之间的转换
  11. 如何将音乐添加到PowerPoint演示文稿
  12. ESP8266制作物联网万能遥控器
  13. FPGA零基础学习:数码管驱动设计
  14. 数理统计(matlab实现)
  15. Unity应用Handles画线,方便查看点间的路径
  16. android点击不灵敏,华为手机触摸屏没反应怎么办?解决手机触摸屏时灵时不灵的办法...
  17. bex5中的常用方法总结
  18. qt 多线程、信号槽、moveToThread等机制之拨乱反正
  19. postgresql设置自动更新时间方法
  20. python如何计算概率事件_Python实现的概率分布运算操作示例

热门文章

  1. 面试中的概率题(持续更新中)
  2. ExpRe[6] 云服务器[0] 基础使用,ssh连接
  3. 开源项目工时系统_12 个非常适合做外包项目的开源后台管理系统
  4. Mac安装Python3.9
  5. 科三——易误细节(下)
  6. 风边编程 第三关霍格沃茨来信
  7. 电视盒子哪个好?内行盘点2023最具性价比电视盒子推荐
  8. 认知空间是什么意思_颠覆认知:空间与时间其实就是我们的一种幻觉
  9. greendao连接mysql_使用GreenDao操作数据库
  10. wemos D1 arduino项目实战3-Tlink平台web表盘监听数据