画板的重绘(一维数组)

画板重绘机制
先前开发了画图板程序,但是将画板窗体最小化或者改变窗体大小的时候,先前画的东西就全部没有了,这是因为当窗体在屏幕上显示的时候,首先是将窗体对象的数据从内存中取出来放到缓存中,再在屏幕上进行绘制。当窗体发生改变的时候,程序会重新从内存中获取更新后的数据绘制。在系统中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]);
}
}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值