在老师介绍了飞机大战原型(简单的子弹发射功能)后,也算是初步对多线程有了一个认识。然后学习着自己做了这样一个擦掉不开心小程序?图片?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) {}
}