1

簡単な質問があります。

paint/paintComponent コンテキスト外でアフィン変換を行うことは可能ですか? たとえば、GeneralPath で作成された Shape を作成し、それを 45° 回転させたいとします。そのオブジェクトを作成し、オブジェクトを作成してから paint/paintComponent メソッドで回転させるのではなく、常にクラス コンストラクタで回転させることは可能ですか?

どうもありがとうございました。


アップデート

情報をありがとうございました。だから今日、私はあなたが提案したように簡単なテストを行いました。

これは、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

しかし今、私は別の質問があります:

Java変換チュートリアルのpaintComponentメソッドで推奨されているように、Rocketクラスでも現在のトラフォームの現在の状態を保護する必要がありますか?

  1. getTransform メソッドを使用して、現在の変換を取得します。
  2. 変換、平行移動、スケーリング、せん断、または回転を使用して、変換を連結します。
  3. レンダリングを実行します。
  4. setTransform メソッドを使用して元の変換を復元します。

繰り返しますが、あなたの答えに感謝します:-)

4

1 に答える 1