重绘

  在画图板上画出一些图形后,如果最小化窗体,然后再将其最大化时,之前的图形会消失,为了使得之前的图形不消失,我们需要重载父类JFrame中的paint()方法,通过数组保存之前图形的相关数据在内存里,等到调用子类中paint()方法时取出数据实现重绘。
代码:
package com20130320;
import java.awt.FlowLayout; 
import java.awt.Graphics; 
 
import javax.swing.JFrame; 
 
//继承JFrame类 
public class ReDraw extends JFrame{ 
//声明一个DrawShape类类型的数组
    MyShape[] sp;
   
    //一般不将长代码写在主函数中
    public static void main(String args[]){ 
        ReDraw re=new ReDraw(); 
        re.showInfo(); 
    } 
  
    
    public void showInfo(){ 
        //创建一个固定大小的窗体
        this.setSize(600,600); 
        this.setResizable(false);
        this.setDefaultCloseOperation(3);
        this.setVisible(true); 
        //得到画布对象
        Graphics gr=this.getGraphics(); 
       
        //创建鼠标监听器
       MyMouseListener lis=new MyMouseListener();
        this.addMouseListener(lis);
        //让监听器中的画布对象g指向gr的内存地址
        lis.g=gr;
        //让在ReDraw类中的数组指向在DrawListener中的数组地址
        sp=lis.a; 
                 
         
        } 
   
    //重载父类中的paint()
    public void paint(Graphics g){ 
    //调用父类中的paint()
        super.paint(g); 
         show(g);
        }
   
   
    public void show(Graphics g){
    System.out.println("执行了重绘");
   
        for(int i=0;i<sp.length;i++){ 
        MyShape ds=new MyShape();
            ds=sp[i];
            //判断ds是否为空
            if(ds!=null){ 
            g.drawOval(ds.x, ds.y, ds.w, ds.h); 
            } 
    }
         
    }    
}



package com20130320;
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 


public class MyMouseListener implements MouseListener{ 
   Graphics g; 
   int count=0; 
    //定义一个MyShape类的数组
   MyShape [] a=new MyShape[100]; 
     //(x1,y1)为点击点的坐标
   int x1,y1;   
        
   
   public void mouseClicked(MouseEvent e) { 
  MyShape ds=new MyShape(); 
        x1=e.getX(); 
        y1=e.getY(); 
       
        ds.x=x1; 
        ds.y=y1; 
        ds.w=50;
        ds.h=50;
        //将数据存入
        a[count]=ds; 
        count++; 
        System.out.println(count);
        g.drawOval(x1,y1,50,50);    
        
   } 


   public void mousePressed(MouseEvent e) {       
   } 
    
   public void mouseReleased(MouseEvent e) { 
   }
    
   public void mouseEntered(MouseEvent e) {        
   }

   public void mouseExited(MouseEvent e) {      
   } 





package com20130320;

public class MyShape { 
//定义MyShape类的属性
   public int x; 
   public int y; 
   public int w;
   public int h;
}

猜你喜欢

转载自939647516.iteye.com/blog/1833838