在之前所编的画图板程序运行后可以实现绘制简单图形功能,但当改变窗体大小后或当使窗体最小化、最大化后图形会消失不见!如何使图形在改变窗体大小后不会消失?这就需要在窗体改变后图形自动重新绘制这一功能。通过自定义队列存储图形的相关信息,在改变窗体后通过paint方法利用存储的图形信息重新绘制。具体方法如下:
定义自定义队列:
public class MyList {
Object [] src = new Object[0];
public void add(Object e){
Object[] dest = new Object[src.length+1];
for(int i=0;i<src.length;i++){
dest[i] = src[i];
}
dest[src.length] = e;
src = dest;
}
public int getLen(){
return src.length;
}
public Object get(int index){
return src[index];
}
}
paint方法:
public class DrawPanel extends JPanel{
private MyList mylist;
public void getList(MyList mylist){
this.mylist=mylist;
}
public DrawPanel(){
setPanel();
}
public void setPanel(){
this.setBackground(Color.white);
}
public void paint(Graphics g){
super.paint(g);
for(int i=0;i<mylist.getLength()/6;i++){
int x1 = (Integer)mylist.get(6*i);
int y1 = (Integer)mylist.get(6*i+1);
int x2 = (Integer)mylist.get(6*i+2);
int y2 = (Integer)mylist.get(6*i+3);
String command = (String)mylist.get(6*i+4);
Color color = (Color)mylist.get(6*i+5);
g.setColor(color);
if("line".equals(command)){
g.drawLine(x1,y1,x2,y2);
}else if("rect".equals(command)){
g.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1));
}else if("oval".equals(command)){
g.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1));
}else if("pencil".equals(command)){
g.drawLine(x1,y1,x2,y2);
}
}
}
}