初学多线程练习2--下雪效果
2017-04-06 15:49
169 查看
此练习没有直接采用继承Thread类或者继承Runnable的接口来实现多线程,而是使用了匿名内部类。
要导入的类:
1.定义SowPanel类,继承JPanel类,这个类有两个整型数组成员,用来保存雪花起始位置。在构造函数中为数组赋初值;重写父类的paint()方法;定义一个启动多线程的startSnow()方法。
2.定义ShowFrame类,继承Jframe 类。在构造方法中设置窗口的显示属性,并创建ShowPanel对象,添加到窗口中。
3.运行效果图片(此为静态图):
疑问:发现其他的不改变,继承Frame、Panel和继承JFrame、Jpanel的运行效果是不同的,前者显示的下雪场景总是有闪烁的感觉;后者则没有闪烁,个人感觉后者效果更好些。
![](http://images2015.cnblogs.com/blog/838671/201511/838671-20151122132640030-391222470.jpg)
要导入的类:
1 import javax.swing.*; 2 import java.awt.*;
1.定义SowPanel类,继承JPanel类,这个类有两个整型数组成员,用来保存雪花起始位置。在构造函数中为数组赋初值;重写父类的paint()方法;定义一个启动多线程的startSnow()方法。
1 class SnowPanel extends JPanel 2 { 3 //定义整型数组,存储雪花坐标 4 private int[] x=new int[300]; 5 private int[] y=new int[300]; 6 7 public SnowPanel() 8 { 9 //设置背景为黑色 10 setBackground(Color.black); 11 //用随机数初始化雪花坐标 12 for(int i=0;i<x.length;i++) 13 { 14 x[i]=(int)(Math.random()*800); 15 y[i]=(int)(Math.random()*600); 16 } 17 } 18 19 public void paint(Graphics g) 20 { 21 //继承父类画的方法 22 super.paint(g); 23 //设置颜色为白色 24 g.setColor(Color.white); 25 //利用循环画出多个雪花 26 for(int i=0;i<x.length;i++) 27 { 28 g.drawString("*",x[i],y[i]); 29 } 30 } 31 //定义一个方法启动多线程,并使用匿名内部类 32 public void startSnow() 33 { 34 new Thread() 35 { 36 public void run() 37 { 38 while(true) 39 { 40 for(int i=0;i<y.length;i++) 41 { 42 //坐标下移 43 y[i]++; 44 //检查是否越界 45 if(y[i]==600) 46 y[i]=0; 47 //重绘 48 repaint(); 49 } 50 51 try 52 { 53 Thread.sleep(10); 54 } 55 catch (InterruptedException e) 56 { 57 e.printStackTrace(); 58 } 59 } 60 } 61 }.start(); 62 } 63 }
2.定义ShowFrame类,继承Jframe 类。在构造方法中设置窗口的显示属性,并创建ShowPanel对象,添加到窗口中。
1 public class SnowFrame extends JFrame 2 { 3 public SnowFrame() 4 { 5 setTitle("满天雪花"); 6 //设置窗体显示坐标和大小 7 setBounds(100,100,800,600); 8 //设置用户在此窗体上发起close时默认的操作 9 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 10 //设置此窗体不可被调整大小 11 setResizable(false); 12 SnowPanel p=new SnowPanel(); 13 //调用能够启动线程的方法 14 p.startSnow(); 15 //把SnowPanel对象添加到此窗体上 16 this.add(p); 17 this.setVisible(true); 18 } 19 public static void main(String[] args) 20 {new SnowFrame();} 21 }
3.运行效果图片(此为静态图):
疑问:发现其他的不改变,继承Frame、Panel和继承JFrame、Jpanel的运行效果是不同的,前者显示的下雪场景总是有闪烁的感觉;后者则没有闪烁,个人感觉后者效果更好些。
![](http://images2015.cnblogs.com/blog/838671/201511/838671-20151122132640030-391222470.jpg)
相关文章推荐
- 初学多线程练习1--电子时钟
- 初学多线程练习3--移动的文本
- python-多线程基础练习4
- 冬天来了,为Ubuntu添加点下雪效果
- JAVA编程思想第四版-多线程的练习答案之练习19
- 初学Java多线程:用Thread类创建线程
- java多线程(三)_多线程练习以及线程运行状态简图
- sass初学练习二
- linux多线程实现黑客帝国字符滑屏效果
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第4章编程练习2
- 多线程练习-synochronized-notify/wait-lock/condition
- 办公管理系统(当初学的时候做练习的)jsp+servlet+javabean
- 3D图片展示效果练习
- [zt] 初学java多线程
- 初学多线程(一)--保护共享资源
- C# 多线程 code练习
- Python 初学笔记:地址簿练习
- 初学python-练习_2使用python编写彩票软件
- 多线程 -- 初学简单例子
- html5--6-56 阶段练习5-翻转效果