Java 多线程---初识之擦除不开心

在老师介绍了飞机大战原型(简单的子弹发射功能)后,也算是初步对多线程有了一个认识。然后学习着自己做了这样一个擦掉不开心小程序?图片?gif?画给我很不开心的蓝朋友~,有一些小的心得需要记录下。效果如下:
在这里插入图片描述

思路整理哈:
1.创建界面类。界面类不用说,这里我是在画图面板创建的监听器,点一下drawpanel飞一颗星星出来。
2.创建飞翔的星星类。这个类要继承Thread父类,告诉程序这个类它是一个线程类
3.创建监听器类。这个类用来连接界面和星星,在界面中调用监听器类,监听器类则调用绘制星星类,注意的一点是,在该类中,启动线程用start方法,这样才可以实现多线程。为了让星星随机的出现,这里还用到了Random这个类,将随机生成的位置通过构造方法传入到星星绘制的类里。
下边是具体的实现过程:

//ui
package game0809V1;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class UI {
	
	//界面属性
	JFrame frame;
	JPanel functionpanel;
	JPanel drawpanel;
	
	//绘制界面
	public void shouUI() {
		frame = new JFrame();
		frame.setSize(900,600);
		frame.setBackground(Color.blue);
		frame.setTitle("流星雨");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
//		functionpanel = new JPanel();
//		frame.add(functionpanel,BorderLayout.NORTH);
		
		drawpanel = new JPanel();
		frame.add(drawpanel,BorderLayout.CENTER);
		drawpanel.setBackground(new Color(65,105,255));
		
		frame.setVisible(true);
		Graphics g = drawpanel.getGraphics();
		FloatAction fl = new FloatAction(g);
		drawpanel.addMouseListener(fl);
		ImageIcon x1 = new ImageIcon("D:\\Users\\Pictures\\xing1.png");
		g.drawImage(x1.getImage(), 30,30, null);
		ImageIcon x2 = new ImageIcon("D:\\Users\\Pictures\\xing5.png");
		g.drawImage(x2.getImage(), -140,210, null);
		ImageIcon x3 = new ImageIcon("D:\\Users\\Pictures\\UN.png");
		g.drawImage(x3.getImage(), 330,150, null);
		
		
	}

	public static void main(String [] args) {
		UI ui = new UI();
		ui.shouUI();
	}
}
//STAR
package game0809V1;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.ImageIcon;

public class DrawFlower extends Thread {
	  
	  private Graphics  g;
	  private int x,y;//花朵起始位置
	  
	  public DrawFlower(Graphics  g,int x,int y){
		  this.g=g;
		  this.x=x;
		  this.y=y;
	  }

	  public void run(){

			 for(int i=0;i<600;i+=5){
				 ImageIcon flower = new ImageIcon("D:\\Users\\Pictures\\xing2.png");
				 g.drawImage(flower.getImage(), 100+x+i*3,130+y+i*2, null);

			  //暂停300毫秒
			     try{
			     Thread.sleep(50);//
			     }catch(Exception ef){
			    	 
			     } 

				 g.setColor(new Color(65,105,255));
				 g.fillRect( 100+x+i*3,130+y+i*2, 100, 100);
		      } 
			 
		}
}

//Listener
package game0809V1;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

public class FloatAction implements MouseListener{
    private Graphics g;
	
	public FloatAction (Graphics g){
		this.g=g;
	}

    public void mouseReleased(MouseEvent e) {

      Random ran=new Random();
  	  int x=ran.nextInt(900);
  	  int y=ran.nextInt(100);
  	  
  	  DrawFlower dt=new DrawFlower(g,x,y);
  	  //启动线程对象,
  	  dt.start();  //线程对象就会并行地去执行自己的run

    }
    
    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值