//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<SnowAttributes> snowList =new ArrayList<SnowAttributes>();
static ArrayList<SnowAttributes> snowremoveList =new ArrayList<SnowAttributes>();
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<SnowAttributes> 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<SnowAttributes> 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<SnowAttributes> 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);//转为弧度
}
}
效果如下