/*
 * gra.java
 *
 * Created on 200776, 6:35
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 *//**
 *
 * @author van
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import javax.swing.*;
import java.lang.*;
import javax.swing.event.*;
class myPanel extends JPanel implements MouseMotionListener,MouseListener

{   private int mousex1,mousey1,mousex2,mousey2;
    public myPanel()
    {
        setBackground(Color.white);
        addMouseMotionListener(this);
addMouseListener(this);
    }
    public void update(Graphics g)
    {
        super.update(g);
        paintComponent(g);
    }
    public void paintComponent(Graphics g)
                   {     super.paintComponent(g);     
                         g.drawLine(mousex1,mousey1,mousex2,mousey2);
                         
                    };
                    public void mousePressed(MouseEvent event){
  if(event.getModifiers()==InputEvent.BUTTON1_MASK){
   mousex1=event.getX();
   mousey1=event.getY();
  }
}

public void mouseClicked(MouseEvent event){

}

public void mouseReleased(MouseEvent event){

}

public void mouseEntered(MouseEvent event){

}

public void mouseExited(MouseEvent event){

}

public void mouseDragged(MouseEvent event){
if(event.getModifiers()==InputEvent.BUTTON1_MASK){
mousex2=event.getX();
mousey2=event.getY();
repaint();
}
}

public void mouseMoved(MouseEvent event){

}
}public class gra {
    
    /** Creates a new instance of gra */
    public gra() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
      JFrame f=new JFrame("AWT");
      myPanel mp=new myPanel();
      f.add(mp);
    f.setSize(600,400);
    f.setLocation(100,100);
    f.addWindowListener(
     new WindowAdapter()
     {
     public void windowClosing(WindowEvent e) 
                  {System.exit(0);};
            }
    );    
    
    
f.show();
    }
    
}这段代码如何修改才能实现第二次画线时不把第一次画的线清除

解决方案 »

  1.   

    好像是在update中做的清除操作
    你可以把所有要显示的线段坐标以数组的方式
    放到一个Vector或一个ArrayList中
    重画的时候取出来重新画就可以了
      

  2.   

    我想是不是可以调用paint来实现?
    但是它不能直接调用,所以不知道怎么办?
    因为我想做一个画图板,要画其他图形,所以用数组存好像不太行
      

  3.   

    如果想不清除图像的话
    可以把那两个super都注释掉
    不用调用
    不过这样会有另外的问题
    你可以看一下
    其实你可以把要画的图形生成以后加入到Vec中
    类似如下:Line2d.float fl=new Line2d.float(……);
    然后把fl加入到vec中
    画的时候取出来再画
      

  4.   

    你可以通过重写paintComponent方法来进行绘图 然后通过repaint()来调用该方法
    如果想清除原先的图 就在paintComponent里调用super.paintComponent();
    如果不调用的话图是不会被清除的