Java编程构建简单画图板3——构建自定义队列实现重绘功能

在之前所编的画图板程序运行后可以实现绘制简单图形功能,但当改变窗体大小后或当使窗体最小化、最大化后图形会消失不见!如何使图形在改变窗体大小后不会消失?这就需要在窗体改变后图形自动重新绘制这一功能。通过自定义队列存储图形的相关信息,在改变窗体后通过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);
   }
  }
 }
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值