我有一个简单的问题要问。
是否可以在paint / paintComponent上下文之外进行仿射变换? 例如,假设我想创建一个由GeneralPath构成的Shape,然后将其旋转45°。 是否可以创建该对象,然后始终在类构造函数中旋转它而不是创建对象,然后在paint / paintComponent方法中旋转它?
非常感谢。
更新
非常感谢信息人员。 所以今天我按照你的建议做了一个简单的测试,并且它有效。
这是使用paintComponent方法中的Affine变换,注释:
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类中当前trasform的当前状态,就像建议对java transforming tutorial中的paintComponent方法一样?
再次,非常感谢您的答案
答案 0 :(得分:1)
不,只应重置转换以恢复Graphics对象的状态,因为系统可以为其他图形重用该Graphics对象。如果在没有Graphics对象的情况下进行转换,则无需担心。
请注意,您不应该通过编辑旧问题来提出新问题,因为这会令人困惑。你应该发一个全新的问题(可能链接你的旧问题)。