2D-Grafik Shape skalieren

Q-Dog

Mitglied
Hallo,

ich möchte gerne eine Form in ihrer Größe verändern, z.B. ein Rechteck.

Dies klappt mit dem Befehl:
Java:
Rectangle2D rect = new Rectangle2D.Double();
rect.setRect(0, 0, 100, 100);

auch wunderbar. Probleme bereitet mir nur folgendes. Ich habe jetzt kein explizites Rectangle, sondern eine Liste mit Shapes. Jetzt möchte ich die Elemente der Liste in ihrer Größe verändern. Shape besitzt die Methode setRect() nicht. Deswegen wollte ich die BoundingBox (welche ein Rectangle ist) ändern, aber das klappt nicht.

Java:
LinkedList<Shape> shapeList = new LinkedList<Shape>();
shapeList.get(0).getBounds2D().setRect(0, 0, 100, 100);

Nun meine Frage:
1. Warum?
2. Wie bekomme ich es hin, dass ich die Elemente der shapeList skalieren kann?


Gruß Q-Dog
 

Q-Dog

Mitglied
warum machst du nicht einen mouselistener für alle und überprüfst, auf welchem Punkt der Punkt liegt.....

lg

Sorry, aber das verstehe ich nicht so ganz ???:L

Es geht nicht um das Herausfinden des Elements der Liste (auf welchem der Mauszeiger ist), sondern generell um das verändern der Größe eines Elements des Interfaces Shape.

Gruß Q-Dog
 

slawaweis

Bekanntes Mitglied
auch wunderbar. Probleme bereitet mir nur folgendes. Ich habe jetzt kein explizites Rectangle, sondern eine Liste mit Shapes. Jetzt möchte ich die Elemente der Liste in ihrer Größe verändern. Shape besitzt die Methode setRect() nicht. Deswegen wollte ich die BoundingBox (welche ein Rectangle ist) ändern, aber das klappt nicht.
getBounds2D() rechnet anhand des Shapes und liefert immer ein neues Objekt zurück. Änderungen darauf haben keinen Effekt auf das Shape. Eine Analogie wäre, wenn man z.B. einen Postkarton mit einem Maßband abmisst. Nur weil man das Maßband etwas länger zieht, wird der Karton dadurch nicht größer.

2. Wie bekomme ich es hin, dass ich die Elemente der shapeList skalieren kann?
dafür ist die Funktion createTransformedShape(Shape pSrc) in AffineTransform zuständig:

AffineTransform (Java Platform SE 6)

Java:
Shape s = ...;

AffineTransform at = new AffineTransform();
at.scale(2.0, 2.0); // Vergrößern um Faktor 2
Shape s2 = at.createTransformedShape(s);

at = new AffineTransform();
at.scale(0.5, 0.5); // Verkleinern um Faktor 2
Shape s3 = at.createTransformedShape(s);

alternativ setTransform() in Graphics2D:

Graphics2D (Java Platform SE 6)

Java:
Shape s = ...;

Graphics2D g2 = ...;

AffineTransform at = new AffineTransform();
at.scale(2.0, 2.0); // Vergrößern um Faktor 2
g2.setTransform(at);
g2.draw(s);

damit wird ein neues Shape in der benötigten Skalierung erstellt bzw. gezeichnet. Man muss aber einige Sachen beachten. Das Interface Shape ist immutable, d.h. createTransformedShape() erstellt immer eine neue Kopie des Shapes. Bei größeren Formen mit vielen Punkten kann das nicht besonders performant sein. Aus diesem Grund ist es besser sich ein neues Objekt zu erstellen, welches ein Shape und eine zugehörige AffineTransform aufnimmt. Bei Veränderungen der Ausmaße des Shapes, wird nur die AffineTransform geändert. Wenn es gezeichnet werden muss, sollte man mit Graphics2D.setTransform() arbeiten. Wenn man mathematisch mit dem Shape arbeiten will, sollte man es kurz vor der Verwendung in den benötigten Raum transformieren.

Slawa
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Was genau ist ein Shape-Objekt? AWT, Swing, JavaFX & SWT 3
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
S 2D-Grafik affine Transformation für Text-Shape AWT, Swing, JavaFX & SWT 0
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Erweitern der Line(Shape)-Klasse AWT, Swing, JavaFX & SWT 1
S Punkt finden der in einem Shape liegt..? AWT, Swing, JavaFX & SWT 11
B org.newdawn.slick.geom.Ellipse cast to Shape AWT, Swing, JavaFX & SWT 2
I 2D-Grafik Shape aus BufferedImage "löschen" AWT, Swing, JavaFX & SWT 2
E Zeichnen von Generalpath (Shape) AWT, Swing, JavaFX & SWT 4
S Shape erstellen der aus mehreren Elementen besteht..? AWT, Swing, JavaFX & SWT 3
J Mehrfarbiges Shape zeichnen? AWT, Swing, JavaFX & SWT 2
G Tooltip Text für ein Shape Objekt AWT, Swing, JavaFX & SWT 2
D Shape über jTable legen AWT, Swing, JavaFX & SWT 2
C JFreeChart X-Achse Werte skalieren, begrenzen, zoomen AWT, Swing, JavaFX & SWT 5
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
C Swing ImageIcon erstellen, skalieren und verwenden AWT, Swing, JavaFX & SWT 3
U Was genau ist skalieren bei 2dGraphics? AWT, Swing, JavaFX & SWT 4
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
J JavaFX JavaFX Elemente an Fenstergröße skalieren AWT, Swing, JavaFX & SWT 5
E Bilder skalieren AWT, Swing, JavaFX & SWT 4
B Swing JTextField mit Bildschirmauflösung skalieren lassen. AWT, Swing, JavaFX & SWT 4
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
S JViewPort Ausschnitt skalieren AWT, Swing, JavaFX & SWT 13
A Bild in JLabel skalieren AWT, Swing, JavaFX & SWT 4
L 2D-Grafik Avatar skalieren und zuschneiden. AWT, Swing, JavaFX & SWT 9
S Bild skalieren AWT, Swing, JavaFX & SWT 3
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
A JFrame skalieren AWT, Swing, JavaFX & SWT 2
F 2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane AWT, Swing, JavaFX & SWT 4
P Swing Bild an Fenstergröße skalieren AWT, Swing, JavaFX & SWT 11
S AWT Skalieren von Polygon über Area klappt nicht AWT, Swing, JavaFX & SWT 4
N 2D-Grafik Panelgrafik im nachhinein skalieren AWT, Swing, JavaFX & SWT 4
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
B Fenstergröße automatisch skalieren AWT, Swing, JavaFX & SWT 7
B Bild skalieren AWT, Swing, JavaFX & SWT 2
N JFreeChart: Plot soll mit skalieren AWT, Swing, JavaFX & SWT 5
D BufferedImage Größe skalieren AWT, Swing, JavaFX & SWT 2
P Swing Skalieren mit DrawImage macht Linien kaputt AWT, Swing, JavaFX & SWT 6
C Image performant skalieren AWT, Swing, JavaFX & SWT 5
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
DStrohma Bild für TrayIcon skalieren AWT, Swing, JavaFX & SWT 13
N Panel skalieren AWT, Swing, JavaFX & SWT 7
N Swing sehr großes Bild skalieren AWT, Swing, JavaFX & SWT 8
D image skalieren AWT, Swing, JavaFX & SWT 5
K JPanel proportional skalieren AWT, Swing, JavaFX & SWT 7
P [SWT] Background-Image skalieren statt kacheln AWT, Swing, JavaFX & SWT 2
R Bild skalieren und anschließend beschneiden AWT, Swing, JavaFX & SWT 3
J Fixes Layout auf beliebige Fenstergröße skalieren AWT, Swing, JavaFX & SWT 2
I Layout Problem beim Skalieren AWT, Swing, JavaFX & SWT 3
M Schlechte Qualität beim skalieren von Bildern AWT, Swing, JavaFX & SWT 10
S Bild skalieren AWT, Swing, JavaFX & SWT 9
B Bild Skalieren AWT, Swing, JavaFX & SWT 2
I Bild skalieren AWT, Swing, JavaFX & SWT 4
O JFrame JPanelgrösse fixieren Bild darin skalieren AWT, Swing, JavaFX & SWT 2
M BufferedImage skalieren AWT, Swing, JavaFX & SWT 6
S Drucken - Bild skalieren AWT, Swing, JavaFX & SWT 2
I Bilder skalieren => OutOfMemoryError AWT, Swing, JavaFX & SWT 2
M Bild skalieren AWT, Swing, JavaFX & SWT 8
S AWT Frame-Inhalt in Echtzeit skalieren AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben