JAVA窗口里增加雪花_java 实现的飘雪花效果

//My_Snow 类

package My_Snow;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.Rectangle;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JPanel;

import com.sun.awt.AWTUtilities;

public class My_Snow {

static ArrayList snowList =new ArrayList();

static ArrayList snowremoveList =new ArrayList();

public static void main(String[] args) {

final JFrame jf = new JFrame();

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jf.setExtendedState(JFrame.MAXIMIZED_BOTH);

jf.setUndecorated(true);//frame修饰

AWTUtilities.setWindowOpaque(jf, false);

// final Rectangle bound = jf.getBounds();//放在这里报错

final JPanel jp = new JPanel(){

int count=30;

Random ran = new Random(47);

@Override

public void paint(Graphics g) {

// TODO Auto-generated method stub

super.paint(g);

Rectangle bound = jf.getBounds();

if(snowList.size()<30){

SnowAttributes snow = new SnowAttributes();

snow.setSnowX(ran.nextInt(bound.width));

snow.setSnowY(ran.nextInt(bound.height));

snow.setAngle(ran.nextInt(360));

snowList.add(snow);

}

Iterator i = snowList.iterator();

int temp =0;

while(i.hasNext()){

SnowAttributes snow = i.next();

snow.setSnowX(snow.getSnowX()+(temp++)/10);

snow.setSnowY(snow.getSnowY()+(temp++)/5);

snow.setAngle(snow.getAngle()*57+5);

if(snow.getSnowX()>bound.width||snow.getSnowY()>bound.height){

snowremoveList.add(snow);

}

if(snow.getAngle()>2*Math.PI){

snow.setAngle(0);

}

}

Iterator i_remove = snowremoveList.iterator();

while(i_remove.hasNext()){

snowList.remove(i_remove.next());

}

Image image=null;

try {

image = ImageIO.read(new File("src/My_Snow/xuehua.png"));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Iterator i2 = snowList.iterator();

while(i2.hasNext()){

SnowAttributes snow = i2.next();

Graphics2D g2d = (Graphics2D) g;

g2d.translate(snow.getSnowX(), snow.getSnowY());

g2d.rotate(snow.getAngle());

g.drawImage(image, 0, 0, null);

g2d.rotate(-snow.getAngle());

g2d.translate(-snow.getSnowX(), -snow.getSnowY());

}

}

};

jp.setOpaque(false);

jf.setContentPane(jp);

jf.setVisible(true);

Thread thread = new Thread(){

public void run() {

while(true){

try {

Thread.sleep(20);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

jp.repaint();

}

};

};

thread.start();

}

}

//SnowAttributes类--------------------------------------------------------------------------------

package My_Snow;

public class SnowAttributes {

private int snowX ;

private int snowY ;

private double angle;//弧度

public int getSnowX() {

return snowX;

}

public void setSnowX(int snowX) {

this.snowX = snowX;

}

public int getSnowY() {

return snowY;

}

public void setSnowY(int snowY) {

this.snowY = snowY;

}

public double getAngle() {

return angle;

}

public void setAngle(double angle) {//angle参数是角度

this.angle = Math.toRadians(angle);//转为弧度

}

}

效果如下

0818b9ca8b590ca3270a3433284dd417.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值