2015-10-22 47 views
-2

具體而言,我試圖只顯示旋轉的對象。我有一個繪製的矩形,我旋轉它。如何在java graphics2D中旋轉後刪除原始對象?

如何只顯示旋轉的矩形並處理舊的?

編輯:

以下是轉動我的矩形代碼:

private void rotateRectangle(Graphics g, Rectangle rect, Color c){ 
      Graphics2D g2d = (Graphics2D) g.create(); 
      x = rect.x; 
      y = rect.y; 
      g2d.setColor(c); 
      g2d.rotate(Math.PI/6, PANEL_WIDTH/2,PANEL_HEIGHT/2); 
      g2d.drawRect(PANEL_WIDTH/2-x/2, PANEL_HEIGHT/2-y/2, x, y); 
     } 

這是的paintComponent,我把它從:

@Override 
    public void paintComponent(Graphics g) {   
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g.create(); 
      g2d.setStroke(new BasicStroke(3)); 

      //these are declared before 
      rect.x = x; 
      rect.y = y; 

      if(rotateClicked){ 
       rotateRectangle(g2d,rect,squareColor); 
       rotateClicked = false; 
      } 
      drawRectangle(g2d, rect, squareColor); 
      getArea(x,y); 
    } 
+0

請分享您用於繪製和旋轉對象的代碼。如果您希望社羣努力回答您的問題,則需要努力解決您的問題。 –

+0

仔細查看[在AWT和Swing中繪畫](http://www.oracle.com/technetwork/java/painting-140037.html)和[執行自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting /)獲取關於繪畫在Swing中的工作原理的詳細信息 – MadProgrammer

+0

@Zoltán我認爲這將有一個快速解決方案,這就是爲什麼我沒有提供代碼,無論如何我現在編輯帖子以包括我迄今爲止的所有 – kvito

回答

4

如果使用Graphics對象自定義渲染形狀,方法是覆蓋paintComponent(Graphics g), /旋轉確保您使用super.paintComponent(g)作爲第一線清除繪圖區域

從那裏吸取你的矩形矩形

不使用super.paintComponent(g),你以前的圖紙(未旋轉矩形)將保持可見

編輯

隨着源代碼的更新:您正在繪製新舊矩形,因爲您的if語句沒有else子句

嘗試插入一個else子句,以便將繪製一個矩形或其他的,目前它也許繪製一個旋轉的矩形,然後繪製未旋轉矩形

if(rotateClicked) 
{ 
    rotateRectangle(g2d,rect,squareColor); 
    rotateClicked = false; 
} 
else 
    drawRectangle(g2d, rect, squareColor); 

您可能會或可能不希望在別的一個rotateClicked = true所以將在旋轉和未旋轉之間來回翻轉

+0

你好,謝謝你的答案。我將源代碼包含在更具體的內容中。我確實使用了超類的構造函數,雖然 – kvito

+0

哦,哇,我可以'相信我錯過了。謝謝!! – kvito

+0

雖然我有一個後續問題,如果我想擴大旋轉圖像的大小,該怎麼辦?我該怎麼辦?我應該記錄未旋轉的矩形尺寸,展開並再次旋轉?或者還有什麼我可能想考慮的? – kvito