先前开发了画图板程序,但是将画板窗体最小化或者改变窗体大小的时候,先前画的东西就全部没有了,这是因为当窗体在屏幕上显示的时候,首先是将窗体对象的数据从内存中取出来放到缓存中,再在屏幕上进行绘制。当窗体发生改变的时候,程序会重新从内存中获取更新后的数据绘制。在系统中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]);
}
}
}
可是如果用数组,有很大的缺陷,因为数组必须得先定义数组的大小。因此不建议用此方法。
画板重绘机制
2万+

被折叠的 条评论
为什么被折叠?



