2013-07-06 34 views
1

我有一個簡單的問題要問。Java Affine轉換

是否可以在paint/paintComponent上下文之外進行仿射變換?例如,假設我想創建一個由通用路徑組成的Shape,然後將其旋轉45°。 是否有可能創建該對象,然後將其始終在類構造函數中旋轉,而不是創建對象,然後在paint/paintComponent方法中將其旋轉?

非常感謝。


UPDATE

非常感謝您的信息傢伙。 所以今天我做了一個簡單的測試,如你所建議的,它的工作原理。

這與仿射的paintComponent方法裏面變換,說:

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D)g; 
    g2.setColor(new Color(230, 230, 230)); 
    g2.fill(enne.getNuvola());//enne.getNuvola(): code from an omitted class. returns a Shape of a cloud 
    g2.setColor(new Color(20, 20, 20)); 

    /* 
    AffineTransform t = AffineTransform.getTranslateInstance(400,400); 
    g2.transform(t);   
    */ 

    g2.fill(rock.getRocket()); 

}//paintComponent 

,這是一個的GeneralPath的類構造函數裏面的仿射變換

public class Rocket { 

GeneralPath rocket; 

public Rocket(){ 

    rocket = new GeneralPath(); 
    rocket.moveTo(10,10); 
    rocket.lineTo(15,15); 
    rocket.lineTo(15,50); 
    rocket.lineTo(5,50); 
    rocket.lineTo(5,15); 
    rocket.lineTo(10,10); 
    rocket.closePath(); 

    AffineTransform t = AffineTransform.getTranslateInstance(400,400); 
    rocket.transform(t); 


}//Rocket Costruttore 

public GeneralPath getRocket(){ 
    return this.rocket; 
} 

}//Rocket 

但現在我還有一個問題:

我是否還必須保護當前狀態的當前變形也在Rocket類中,就像它建議爲paintCo做的那樣mponent方法在java transforming tutorial

  1. 使用getTransform方法獲取當前變換。
  2. 使用變換,平移,縮放,剪切或旋轉來連接變換。
  3. 執行渲染。
  4. 使用setTransform方法恢復原始變換。

再次,非常感謝你對你的答案:-)

+1

是的,這是可能的。 –

+1

我是安德魯·湯普森說的。這確實是可能的。爲什麼不試試呢? –

+1

這是一個特別有益的練習;使用'Shape'的'PathIterator'來查看效果。 – trashgod

回答

1

不,變換應該僅重置恢復圖形對象的狀態,因爲該圖形對象可以通過該系統對其他圖紙被重用。如果您在沒有Graphics對象的情況下進行轉換,則不需要擔心這一點。

請注意,您不應該通過編輯舊問題來提出新問題,因爲這會讓人困惑。你應該發佈一個全新的問題(可能會鏈接你的舊問題)。

+0

你非常。 非常感謝您的編輯/回答提示。 – Emanuele