12.12Das Geometry-Paket *
Punkte selbst lassen sich nicht in den Szenegraphen einfügen, weil Punkte keine Ausdehnung haben. Wer also einen Punkt benötigt, muss etwa einen Minikreis, ein Rechteck oder eine Linie mit einer sehr kleinen Ausdehnung zeichnen.
Auch wenn JavaFX kein spezielles Shape-Objekt für Punkte bietet, so gibt es dennoch Klassen, die Punkte repräsentieren können und mit ihnen Hilfsmethoden. Denn geometrische Fragen, etwa wie nach dem Abstand eines Punktes zu einer Linie oder ob sich zwei Boxen schneiden, werden nicht von den JavaFX-Shape-Objekten beantwortet, sondern von Klassen aus dem javafx.geometry-Paket. Diese sind sehr leichtgewichtige Objekte, haben keinerlei Listener oder JavaFX-Properties, sondern nur einfache Setter/Getter und Hilfsmethoden. Alle folgenden Klassen sind immutable und bekommen ihre Werte einmalig über den Konstruktor:
Point2D: Zweidimensionaler Punkt, repräsentiert durch x/y-Koordinaten. Beantwortet etwa Fragen zum Abstand von zwei Punkten oder berechnet den Mittelpunkt zwischen zwei Punkten. Point2D wird auch verwendet, um Vektoren zu spezifizieren, bei denen dann der Ursprung bei (0,0) liegt. Point2D beantwortet auch Fragen, wie etwa nach dem Winkel zwischen zwei Vektoren, oder berechnet das Kreuzprodukt.
Point3D: Dreidimensionaler Punkt, gegeben durch die x/y/z-Koordinaten. Die Methoden sind wie bei Point2D, also etwa Abstandsberechnung, Mittelpunkt, Winkelberechnung.
Rectangle2D: Rechteck im zweidimensionalen Raum, gegeben durch Startkoordinaten und Höhe, Breite. Beantwortet, ob ein Punkt im Rechteck liegt oder ob sich ein anderes Rechteck im Rechteck befindet oder es schneidet.
Dimension2D: Ausmaße eines Objekts, gegeben durch Höhe und Breite. Es gibt außer Getter keine weiteren Anfragemethoden.
Insets: Abstände zu oben, unten, rechts, links. Es gibt nur Getter, keine weiteren Anfragemethoden.
Bounds, BoundingBox: Die Klasse BoundingBox erweitert die abstrakte Klasse Bounds und dient der Beschreibung von Ausmaßen und Grenzen von JavaFX-Knoten. JavaFX-Node-Objekte liefern zum Beispiel mit getBoundsInLocal()/getBoundsInParent() die Informationen zur Lage des Objekts als Bounds-Objekt.
Java 2D-API versus JavaFX
Bei den Java Foundation Classes sind diese Hilfsmethoden in den Klassen selbst integriert, oft als statische Methoden. So vereinigt java.awt.geom.Rectangle2D Funktionalität der JavaFX-Klassen javafx.scene.shape.Rectangle und javafx.geometry.Rectangle2D. Auch fehlt bei JavaFX eine Methode, die testet, wo sich außerhalb eines Rechtecks ein Punkt befindet. Da JavaFX im javafx.geometry-Paket keine Linien kennt, bleiben einige Fragen unbeantwortet, etwa die Frage, ob ein Punkt links oder rechts einer Linie liegt, was die JFC Klasse Line2D beantworten kann.