2011-09-20 33 views
2

我開發一個GUI應用程序的繪畫。但問題是,幀內容在最小化和最大化時被擦除。我知道問題是什麼,它是在最大化之後再次調用paint並且框架的內容處理不當。但即使知道了錯誤,我仍然無法解決這種行爲。圖形內容將被刪除的最大化

這裏是負責此行爲的主要代碼:

public void paint(Graphics g) { 
    /*From minimized to maximized*/ 
    System.err.println("Inside paint now "); 
    try{ 
    if(color==colour.red) 
     g.setColor(Color.red); 
    else if(color==colour.green) 
     g.setColor(Color.green); 
    else if(color==colour.pink) 
     g.setColor(Color.PINK); 
    else if(color==colour.cyan) 
     g.setColor(Color.CYAN); 
    else if(color==colour.magenta) 
     g.setColor(Color.MAGENTA); 
    else if(color==colour.orange) 
     g.setColor(Color.ORANGE); 
    else if(color==colour.white) 
     g.setColor(Color.white); 
    else if(color==colour.black) 
     g.setColor(Color.BLACK); 
    else if(color==colour.yellow) 
    { 
     g.setColor(Color.YELLOW); 
     System.out.println("Colour selected "); 
    } 
    else if(stat==state.line) 
    { 
      Point p=getMousePosition(); 

      x=p.x;y=p.y; 
      System.out.append("In here "); 
      System.out.append("the point is "+x+" "+y); 
      if(prevx==0 && prevy==0) 
      { 
       g.drawLine(x, y, x, y); 
      // System.out.append("the point is "+x+" "+y); 
      } 
      else 
      g.drawLine(x, y, prevx, prevy); 
      prevx=x; 
      prevy=y; 
      System.out.println("Line selected "); 
    } 
    else if(stat==state.rectangle) 
    { 
      if(x<prevx) 
      { 
       x=x+prevx; 
       prevx=x-prevx; 
       x=x-prevx; 
      } 
      if(y<prevy) 
      { 
       y=y+prevy; 
       prevy=y-prevy; 
       y=y-prevy; 
      } 
      g.drawRect(prevx,prevy,x-prevx,y-prevy); 
      System.out.println("Rectangle selected "); 
    } 
    else if(stat==state.circle) 
    { 
      if(x<prevx) 
      { 
       x=x+prevx; 
       prevx=x-prevx; 
       x=x-prevx; 
      } 
      if(y<prevy) 
      { 
       y=y+prevy; 
       prevy=y-prevy; 
       y=y-prevy; 
      } 
      g.drawOval(prevx,prevy,x-prevx,y-prevy); 
      System.out.println("Circle selected "); 
    } 
    else if(stat==state.ruler) 
    { 
      g.drawLine(x, y, prevx, prevy); 
      System.out.println("Ruler selected "); 
    } 
    else if(stat==state.eraser) 
    { 
      g.setColor(getBackground()); 
      g.fillRect(x-10, y-10, 20, 20); 
      System.out.println("Eraser selected "); 
    } 
    else 
    { 
      System.out.append("nothing done"); 
    } 
    } 
    catch(Exception e) 
    { 
    } 
} 
+1

而你重寫'paint'而不是'paintComponent',因爲...? – mrkhrts

+1

究竟是在這裏畫什麼?或者更好的是,[SSCCE](http://pscode.org/sscce.html)在哪裏。 –

+2

空抓catch(異常e){}'?所以**如果**出現問題,至少沒有人會注意到?我建議添加'e.printStackTrace();'。看看它打印什麼。 – Ishtar

回答

1

我的投票mkrhrts的評論,你要覆蓋paint時,你應該覆蓋paintComponent

重載paint是不好的做法,而你似乎沒有做任何以下,以確保它不會破壞:

  • 呼叫super.paint()
  • 呼叫paintComponentpaintBorder,或paintChildren

退房的documentation for the paint method