画图板的重绘

前言

我们画图板上的内容如果不加重绘的话就是一次性的,只要我的画板被隐藏或是扩大,画板上的内容就会消失。
在我之前的内容里,我实现了一个基础的画线内容,它的源代码是这样的

	public void mouseDragged(MouseEvent e) {
		g.setColor(Color.white);
		g.drawLine(x1, y1, x3, y3);//将上一次的线涂白

		x2=e.getX();
		y2=e.getY();
		
		g.setColor(Color.black);
		g.drawLine(x1, y1, x2, y2);
		x3=x2;
		y3=y2;

而这会出现什么问题呢,
如果我们在下一次的拖动操作中将拖动的线移到之前的线上,之前的线就会被擦除,这是由于“涂白”代码造成的。为了解决这个问题,我们想到实现重新

创建新的类记录坐标

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

public class Shape{
	public int x1,y1,x2,y2;
	void drawShape(Graphics g) {
		g.setColor(Color.black);
		g.drawLine(x1, y1, x2, y2);
	}
}

我们在这个类里写入了一个画线的函数,这个函数也可以写在别处,新类的主要作用是记录坐标

在我们的监听器的类里边创建个Shape对象数组用于记录坐标

public Shape []a=new Shape[100];
int index=0;
public void mouseReleased(MouseEvent e) {
    	x2=e.getX();
    	y2=e.getY();
    	Shape shape=new Shape();
    	shape.x1=x1;
    	shape.y1=y1;
    	shape.x2=x2;
    	shape.y2=y2;
    	a[index++]=shape;
    }

这样就存入了一个shape对象的信息

重绘的实现

很简单,只需要在画白线的后面加上重绘就行

public void mouseDragged(MouseEvent e) {
   	g.setColor(Color.white);
   	g.drawLine(x1, y1, x3, y3);
   	for(int i=0;i<a.length;i++) {
   		System.out.println("重绘");//用于检测是否实现
   	Shape shape=a[i];
   	if(a[i]!=null)
   		shape.drawShape(g);
   	else
   		break;
   	}
   	x2=e.getX();
   	y2=e.getY();
   	
   	g.setColor(Color.black);
   	g.drawLine(x1, y1, x2, y2);
   	x3=x2;
   	y3=y2;
   	
   	
   } 

整个界面的重绘

要实现这个功能我们需要改写我们的paint函数
paint函数本身隐含在我们的JFrame里面,在我们的框架发生大小改变的时候会自动调用,我们现在要给它增添一些内容,并且保留原来的内容

public void paint(Graphics g) {
	super.paint(g);//继承父类的功能
	for(int i=0;i<a.length;i++) {
		System.out.println("重绘");
	Shape shape=a[i];
	if(a[i]!=null)
	shape.drawShape(g);
	}
}

小结

以上就是关于重绘的一些简单实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值