需求分析
- 目的是实现一个基于Java多线程和图形界面设计的雪花飞舞(飘雪花)效果,附带背景图及背景音乐。
- 需要理解Java基础、Java多线程、lambda表达式、Java图形界面设计等。
设计思路
- 设计实现雪花类
- 设计实现音乐播放类
- 设计实现飘雪花主界面类
设计实现
- 雪花飞舞项目结构:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/630291297efe28bc486a50b11c7d5662.png)
- 雪花类的设计实现:雪花是一个
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=