用Java实现多线程画图

用Java实现多线程画图

目录

  1. 功能分析
  2. 初步实现
  3. 添加监听器
  4. 创建多线程
  5. 实现多线程画图

1,功能分析

这个程序的基本思路就是:展示一个JFrame界面,给JFrame添加我们自己实现的鼠标事件监听器,记录鼠标事件点击时鼠标所在坐标;JFrame类提供了一个getGraphics()方法可以得到java.awt.Graphics对象,Graphics可以理解为“画布”对象,通过调用Graphics对象不同的Draw方法并传入鼠标的坐标参数,就可以在JFrame界面上画出相应的图形;最后,利用Runnable接口为程序添加多线程。

2,初步实现

package 画球;
import java.awt.Graphics;
import javax.swing.*;
public class Draw {
	public static void main(String[] args) {
		Draw d = new Draw();
 		d.showUI();
	}
	public void showUI(){
		JFrame jf = new JFrame();
		jf.setTitle("画板");
		jf.setSize(800, 500);
		jf.setResizable(false); 
		jf.setDefaultCloseOperation(3);
		jf.setVisible(true);
		Graphics g = jf.getGraphics();
		}
}

3,添加监听器

创建一个新的类DrawListener用于写监听器,这里用的是鼠标事件监听器,可以在查看鼠标事件监听器的声明

用Java实现多线程画图_第1张图片我们这里重写鼠标事件监听器的mouseReased方法,当鼠标松开时,在当前位置画一个圆。

package 画球;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
public class DrawListener implements MouseListener{
	 public int x1,x2,y1,y2;
	 public int pre=0,now=1;
	 private Graphics g;
	 public boolean f = false;
	 public DrawListener(Graphics g){
	  this.g = g;
	 }
	public void mouseClicked(MouseEvent e){
	}
	public void mousePressed(MouseEvent e){ 
	}
	public void mouseReleased(MouseEvent e){
	x1 = e.getX();
	y1 = e.getY();
	g.fillOval(x1-25, y1-25, 50, 50);
	}
	public void mouseEntered(MouseEvent e){ 
	}
	public void mouseExited(MouseEvent e){  
	}
}

4,创建多线程

需要注意的是要将Graphics和坐标传进来

package 画球;
import java.awt.Graphics;
public class Run implements Runnable {
	private Graphics g;
	public int x1, y1;
	public Run(Graphics g, int x1, int y1) {
		this.g = g;
		this.x1 = x1;
		this.y1 = y1;
	}
	public void run() {
		int i = 0;
		while (true) {
			g.fillOval(x1 - 25 + i, y1 - 25, 50, 50);
			try {
				Thread.sleep(40);
			} catch (InterruptedException e1) {
			e1.printStackTrace();
			}
			i++;
		}
	}
}

最后在监听器的mouseReased方法中创建多线程并在主程序中添加监听器

Run r = new Run(g,x1,y1);
new Thread(r,"1").start();
DrawListener dl = new DrawListener(g);
jf.addMouseListener(dl);

5,实现多线程画图

运行程序

用Java实现多线程画图_第2张图片

随便点击几个点,出现同时运行的线程

用Java实现多线程画图_第3张图片

用Java实现多线程画图_第4张图片

你可能感兴趣的:(Java)