Graphics zoomen OHNE background image?

shocking

Mitglied
Hi,

ich habe mir ein Panel gebaut, welches in einer ScrollPane liegt. In der paintComponent()-Methode werden derzeit einfach Objekte gezeichnet (Rectangles, Shapes). Diese möchte ich nun Zoomen, Drehen etc.
Ich habe es wie folgt versucht:

Code:
protected void paintComponent( Graphics g )
    {
      Graphics2D g2D = ( Graphics2D )g;

      AffineTransform transform = new AffineTransform();
      transform.scale( m_zoomFactor, m_zoomFactor );
      g2D.transform( transform );

      paintBackground( g2D ); // malt den Hintergund mit verschiedenen Farbabschnitten
      paintObjects( g2D );  // malt die Objekte
    }

Das Zoomen funktioniert soweit, aber leider wird die ScrollPane so nicht informiert. Hat jemand nen Tip, wie und wo ich das machen kann?

Eine Möglichkeit ist, die Methode getPreferredSIze() zu überschreiben. Da habe ich dann ein künstlich als Hintergrund geladenes BufferedImage als Grundlage benutzt. Das finde ich aber sehr unschön, da ich eigentlich gar kein Image im Hintergrund habe und brauche.

Code:
this.backgroundImage = new BufferedImage(size.width, size.height,
                    BufferedImage.TYPE_INT_RGB);


public Dimension getPreferredSize()
  {
    Dimension size =
      new Dimension(
        ( int )( backgroundImage.getWidth( this ) + ( backgroundImage
          .getWidth( this ) * ( this.zoomFactor - 1 ) ) ),
        ( int )( backgroundImage.getHeight( this ) + ( backgroundImage
          .getHeight( this ) * ( this.zoomFactor - 1 ) ) ) );
    return size;
  }

Das muss doch auch ohne gehen, oder?

Danke und Gruß
shocking
 
Verstehe sowieso nicht, warum das Bild nötig ist. Merk Dir doch beim Start die Originalgröße des Panels

Code:
int origWidth = size.width;
int origHeight = size.height;

und verwende dann origWidth und origHeight in Deiner Methode.
 

Neue Beiträge

Zurück