画板的重绘(一维数组)

   先前开发了画图板程序,但是将画板窗体最小化或者改变窗体大小的时候,先前画的东西就全部没有了,这是因为当窗体在屏幕上显示的时候,首先是将窗体对象的数据从内存中取出来放到缓存中,再在屏幕上进行绘制。当窗体发生改变的时候,程序会重新从内存中获取更新后的数据绘制。在系统中JFrame的父类中提供一个paint(Graphics g)的方法来负责将窗体的数据在屏幕上绘制出来。
   我们可以用一个容器把所画图形存储起来,例如数组,队列。
   在这里,首先用数组实现画板的重绘。
源代码如下:
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
   public class MyDraw extends JFrame{
	   int[] array=new int[100];
	   Graphics g;
	   int x1,y1,x2,y2;
	   int i=0;
	public static void main(String[] args){
		
      MyDraw draw=new MyDraw();
      draw.init();
	}
public void init(){
	this.setTitle("画板重绘的实现");
	this.setSize(300, 300);
	this.setDefaultCloseOperation(3);
    this.addMouseListener(mls);
	this.setVisible(true);
	g=this.getGraphics();
}
DrawListener mls=new DrawListener();
public class DrawListener extends MouseAdapter{
	public void mousePressed(MouseEvent e){
		x1=e.getX();
		y1=e.getY();
	}
	public void mouseReleased(MouseEvent e){
		x2=e.getX();
		y2=e.getY();
		
		i++;
			 array[4*i-4]=x1;
			array[4*i-3]=y1;
			array[4*i-2]=x2;
		   array[4*i-1]=y2;
			g.drawLine(x1, y1, x2, y2);
		}
		
	}

public void paint(Graphics g){
	//一定要先调用父类的paint 方法,用来绘制窗体。
	super.paint(g);
	System.out.println("paint()");
	for(int i=0;i<25;i++){
		g.drawLine(array[4*i],array[4*i+1],array[4*i+2],array[4*i+3]);
	}
}
}


   可是如果用数组,有很大的缺陷,因为数组必须得先定义数组的大小。因此不建议用此方法。

猜你喜欢

转载自458677906.iteye.com/blog/1698098