初学多线程练习2--下雪效果
来源:互联网 发布:淘宝五心要多少信誉 编辑:程序博客网 时间:2024/05/05 08:25
此练习没有直接采用继承Thread类或者继承Runnable的接口来实现多线程,而是使用了匿名内部类。
要导入的类:
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 try52 {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的运行效果是不同的,前者显示的下雪场景总是有闪烁的感觉;后者则没有闪烁,个人感觉后者效果更好些。
0 0
- 初学多线程练习2--下雪效果
- javascript实现下雪效果
- WPF实现下雪效果 ...
- 圣诞下雪效果
- canvas下雪效果
- 下雪了动态效果
- 自定义View下雪效果
- Android 仿下雪效果
- 实现下雪效果
- jQuery实现下雪效果
- snowStorm.js下雪效果
- 初学多线程练习1--电子时钟
- 初学多线程练习3--移动的文本
- JavaScript实现下雪(Snow)效果
- JavaScript实现下雪(Snow)效果
- 用Fireworks实现下雪效果
- android 模拟下雪的效果
- 粒子系统----实现下雪效果
- linux_raid
- 终止线程执行的两种方法
- PHP连接到mysql数据库
- java集合系列之一—ArrayList
- IronPython之在C#中获取Python对象的类名
- 初学多线程练习2--下雪效果
- linux smb服务
- 我常用的 log4net 配置
- 多线程--毕向东java基础教程视频学习笔记
- jndi客户端代码实现
- 品茗论道说广播(Broadcast内部机制讲解)
- 初学多线程练习3--移动的文本
- Robot Framework 网页自动化测试中“下载文件”
- mui自定义图标