调用了g.setXORMode(getBackground());之后,在某个位置绘制一条线之后,需要在相同位置再绘制一条线,才会将第一次的线清楚。
所以建议你在程序里记住上一次绘制线的位置,在每次绘制线条的时候,首先在原来的位置绘制一次,然后再在新的位置绘制。

解决方案 »

  1.   

    如 lapwing2002() 所说,异或模式的意义就是那样不过看问题的话,我更想看你的paint(Graphics g)
    或者是paintComoponent(Graphics g)
    方法是怎么写的。
      

  2.   

    public void paintComponent(Graphics g)
       {
       super.paintComponent(g);
       g.drawLine(50,450,550,450);
       g.drawLine(50,20,50,450);
      
       Polygon p10 = new Polygon();
       p10.addPoint(45,20);
       p10.addPoint(55,20);
       p10.addPoint(50,15);
       g.drawPolygon(p10);
      
       Polygon p11 = new Polygon();
       p11.addPoint(550,445);
       p11.addPoint(550,455);
       p11.addPoint(555,450);
       g.drawPolygon(p11);
       try
    {
    SAXBuilder sb = new SAXBuilder(); 
         Document doc = sb.build(new FileInputStream("xxx.xml"));
         Element root = doc.getRootElement();
        
         double big = 0.0;
         int total = 0;
         int paytotal = 0;
      
       if(!Const.findElement(root.getChild("income"),aYear))
       {
       g.setColor(Color.red);
       g.drawString("(选择的年没数据)",250,250);
       g.setColor(Color.black);
       }
       else
       {
      
       int[] gx = new int[12];
       int[] gy = new int[12];
       int[] pgy = new int[12];
      
      
       for(int i=1;i<=12;i++)
       {
       total = 0;
       paytotal = 0;
      
       if(Const.findElement(root.getChild("income").
       getChild(aYear),"a"+i))
       {
       for(int r=0;r<root.getChild("income").
       getChild(aYear).getChild("a"+i).getChildren().size();r++)
       {
       System.out.println("这个月数据为");
       total = total+Integer.parseInt(((Element)root.getChild("income").
       getChild(aYear).getChild("a"+i).getChildren().get(r)).getAttributeValue("num"));
       }
      
       if((int)big < total)
       {
       big = (double)total;
       }
      
       System.out.println("这个月数据为"+total);
       }
       else
       {
       System.out.println("这个月数据为0");
       total = 0;
       }
      
      
       if(Const.findElement(root.getChild("payout").
       getChild(aYear),"a"+i))
       {
       for(int r=0;r<root.getChild("payout").
       getChild(aYear).getChild("a"+i).getChildren().size();r++)
       {
       System.out.println("这个月数据为");
       paytotal = paytotal+Integer.parseInt(((Element)root.getChild("payout").
       getChild(aYear).getChild("a"+i).getChildren().get(r)).getAttributeValue("num"));
       }
      
       if((int)big < paytotal)
       {
       big = (double)paytotal;
       }
      
       System.out.println("这个月数据为"+paytotal);
       }
       else
       {
       System.out.println("这个月数据为0");
       paytotal = 0;
       }
      
       g.drawLine(50+i*40,445,50+i*40,450);
       g.drawString(""+i,50+i*40-4,465);
      
       gx[i-1] = (50+i*40);
       gy[i-1] = total;
       pgy[i-1] = paytotal;
      
       }
      
          System.out.println("^"+big+"^");
      
       for(int h=1;h<=20;h++)
       {
       g.drawLine(50,450-(int)((toplimit/20)*h*(400/toplimit)),55,450-(int)((toplimit/20)*h*(400/toplimit)));
       g.drawString(""+(int)(toplimit/20)*h,15,450-(int)((toplimit/20)*h*(400/toplimit))+5);
       }
      
       g.drawString("(月)",555,465);
      
        Graphics2D g2d = (Graphics2D)g;
        
        g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, 
             RenderingHints.VALUE_ANTIALIAS_ON );
              g2d.setRenderingHint( RenderingHints.KEY_RENDERING, 
              RenderingHints.VALUE_RENDER_QUALITY );
               g2d.setStroke(new BasicStroke(1F,BasicStroke.CAP_ROUND,
               BasicStroke.JOIN_BEVEL));
       for(int j=0;j<12;j++)
       {
       if(j==11)
       {
      
       }
       else
       {
       g2d.setPaint(Color.red);
       g2d.drawLine(gx[j],(int)(450-gy[j]*(400/toplimit)),gx[j+1],450-(int)(gy[j+1]*(400/toplimit)));
       g2d.setPaint(Color.green);
       g2d.drawLine(gx[j],(int)(450-pgy[j]*(400/toplimit)),gx[j+1],450-(int)(pgy[j+1]*(400/toplimit)));
       }
       }
       }
      
       }
    catch(Exception e1)
            {
             System.out.println(e1);
         }

      
       }
      

  3.   

    public void mouseDragged(MouseEvent evt)
       {
       System.out.println(evt.getX());
       Graphics g = getGraphics();
       g.setXORMode(getBackground());
       g.drawLine(start.x,50,end.x,450);
             g.drawLine(start.x,50,end.x,450);
       g.dispose();
       }
    这样写对不对呢
      

  4.   

    写个update()里面就一句paint();
    这是什么意思
      

  5.   

    写个update()里面就一句paint();
    没用还是老样子
      

  6.   

    public void mouseDragged(MouseEvent evt)
       {
       System.out.println(evt.getX());
       Graphics g = getGraphics();
       g.setXORMode(getBackground());
       g.drawLine(start.x,50,end.x,450);
             g.drawLine(start.x,50,end.x,450);
       g.dispose();
       }
    其实就是这段代码,这根线就是它画的,
      

  7.   

    import java.awt.*;
    import java.awt.event.*;import javax.swing.*;public class TestGraphics extends JFrame{
    Point start=new Point();
    Point end=new Point();
    public TestGraphics(){
    this.addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent e){
    System.out.println (e);
    if(e.getButton()==MouseEvent.BUTTON1){
    start.x=e.getPoint().x;
    start.y=e.getPoint().y;
    }
    else{
    end.x=e.getPoint().x;
    end.y=e.getPoint().y;
    Graphics g=getGraphics();
    int r=(int)(Math.random()*255);
       int gg=(int)(Math.random()*255);
       int b=(int)(Math.random()*255);
       g.setColor(new Color(r,gg,b));
    g.drawLine(start.x,start.y,end.x,end.y);
    g.dispose();
    }

    } });

    this.addMouseMotionListener(new MouseMotionAdapter(){
    public void mouseDragged(MouseEvent e){
       Graphics g = getGraphics();
       g.setXORMode(getBackground());
      
       int r=(int)(Math.random()*255);
       int gg=(int)(Math.random()*255);
       int b=(int)(Math.random()*255);
      
       g.setColor(new Color(r,gg,b));
      
       g.drawLine(start.x,start.y,e.getPoint().x,e.getPoint().y);
            g.dispose();
       }
    });

    setSize(512,384);
    Container c=this.getContentPane();
    c.add(new P());
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    } public static void main(String[] args){
    new TestGraphics();
    }
    }class P extends JPanel{

    public P(){ }

    public void paintComponent(Graphics g){
    super.paintComponent(g);
    }
    }我怎么画不上线去啊,画一下就是一大片。
      

  8.   

    g.drawLine(start.x,start.y,e.getPoint().x,e.getPoint().y);
    再画一遍,什么都没有了。