Java窗体利用多线程实现雪花飘落动画
成果图
SnowJFrame类
package cn.edu.sqc.zzx; import javax.swing.*; public class SnowJFrame extends JFrame{ public static void main(String[] args) { //创建窗体类对象 SnowJFrame asj = new SnowJFrame(); } //构造方法 public SnowJFrame(){ //设置窗体 //设置标题 this.setTitle("雪花飘落"); //设置默认关闭 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置大小 this.setSize(800,600); //设置位置居中 this.setLocationRelativeTo(null); //添加画布 SnowJPanel sjp = new SnowJPanel(); this.add(sjp); Thread thread = new Thread(sjp); thread.start(); this.setVisible(true); } }
SnowJPanel类
package cn.edu.sqc.zzx; import javax.swing.*; import java.awt.*; import java.util.Random; public class SnowJPanel extends JPanel implements Runnable { int[] x = new int[300]; int[] y = new int[300]; int[] a = new int[300]; public int random(int a){ return (int)(Math.random()*a); } public SnowJPanel(){ for (int i = 0; i < 100; i++) { x[i] = new Random().nextInt(800) + 1; y[i] = new Random().nextInt(600) + 1; } } @Override public void paint(Graphics g) { super.paint(g); //设置背景色 setBackground(Color.black); //设置画笔的背景 g.setColor(Color.white); //画星星飘落 for (int i = 0; i < 300; i++) { g.drawString("*",x[i],y[i]); for (int j = 0; j < a[i]; j++) { g.drawString("*",x[i],600 - j*3); } } //画月亮 g.fillOval(530,60,50,50); g.setColor(Color.black); g.fillOval(550,60,50,50); } @Override public void run() { while(true){ for (int i = 0; i < y.length; i++) { if(y[i]<=600){ y[i] ++; }else{ a[i] ++; y[i] = 0; } } repaint(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }
上一篇:
通过多线程提高代码的执行效率例子