Java SE 8 Standard-Bibliothek  
Professionelle Bücher. Auch für Einsteiger.
 
Inhaltsverzeichnis


Vorwort
1 Neues in Java 8 und Java 7
2 Fortgeschrittene String-Verarbeitung
3 Threads und nebenläufige Programmierung
4 Datenstrukturen und Algorithmen
5 Raum und Zeit
6 Dateien, Verzeichnisse und Dateizugriffe
7 Datenströme
8 Die eXtensible Markup Language (XML)
9 Dateiformate
10 Grafische Oberflächen mit Swing
11 Grafikprogrammierung
12 JavaFX
13 Netzwerkprogrammierung
14 Verteilte Programmierung mit RMI
15 RESTful und SOAP-Web-Services
16 Technologien für die Infrastruktur
17 Typen, Reflection und Annotationen
18 Dynamische Übersetzung und Skriptsprachen
19 Logging und Monitoring
20 Sicherheitskonzepte
21 Datenbankmanagement mit JDBC
22 Java Native Interface (JNI)
23 Dienstprogramme für die Java-Umgebung
Stichwortverzeichnis

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java SE 8 Standard-Bibliothek von Christian Ullenboom
Das Handbuch für Java-Entwickler
Buch: Java SE 8 Standard-Bibliothek

Java SE 8 Standard-Bibliothek
Pfeil 12 JavaFX
Pfeil 12.1 Das erste Programm mit JavaFX
Pfeil 12.2 Zentrale Typen in JavaFX
Pfeil 12.2.1 Szenegraph-Knoten und Container-Typen
Pfeil 12.2.2 Datenstrukturen
Pfeil 12.3 JavaFX-Komponenten und Layout-Container-Klassen
Pfeil 12.3.1 Überblick über die Komponenten
Pfeil 12.3.2 Listener/Handler zur Ereignisbeobachtung
Pfeil 12.3.3 Panels mit speziellen Layouts
Pfeil 12.4 Webbrowser
Pfeil 12.5 Geometrische Objekte
Pfeil 12.5.1 Linien und Rechtecke
Pfeil 12.5.2 Kreise, Ellipsen, Kreisförmiges
Pfeil 12.5.3 Es werde kurvig – quadratische und kubische Splines
Pfeil 12.5.4 Pfade *
Pfeil 12.5.5 Polygone und Polylines
Pfeil 12.5.6 Beschriftungen, Texte, Fonts
Pfeil 12.5.7 Die Oberklasse Shape
Pfeil 12.6 Füllart von Formen
Pfeil 12.6.1 Farben mit der Klasse Color
Pfeil 12.7 Grafiken
Pfeil 12.7.1 Klasse Image
Pfeil 12.7.2 ImageView
Pfeil 12.7.3 Programm-Icon/Fenster-Icon setzen
Pfeil 12.7.4 Zugriff auf die Pixel und neue Pixel-Bilder *
Pfeil 12.8 Deklarative Oberflächen mit FXML
Pfeil 12.9 Diagramme (Charts)
Pfeil 12.9.1 Kuchendiagramm
Pfeil 12.9.2 Balkendiagramm
Pfeil 12.10 Animationen
Pfeil 12.10.1 FadeTransition
Pfeil 12.10.2 ScaleTransition
Pfeil 12.10.3 Transitionen parallel oder sequenziell durchführen
Pfeil 12.11 Medien abspielen
Pfeil 12.12 Das Geometry-Paket *
Pfeil 12.13 JavaFX-Scene in Swing-Applikationen einbetten
Pfeil 12.14 Zum Weiterlesen
 
Zum Seitenanfang

12JavaFX Zur vorigen ÜberschriftZur nächsten Überschrift

»Die Reparatur alter Fehler kostet oft mehr als die Anschaffung neuer.«
– Wieslaw Brudzinski (1920–1996)

JavaFX bietet attraktive Fähigkeiten zum Design moderner grafischer Oberflächen. Dieses Kapitel beleuchtet auf der Basis von JavaFX 8 Aspekte wie den Aufbau der Oberflächen über Programmcode oder deklarative XML-Dateien, Charts und weitere Grundlagen.

 
Zum Seitenanfang

12.1Das erste Programm mit JavaFX Zur vorigen ÜberschriftZur nächsten Überschrift

Das erste JavaFX-Programm soll die Grundsätze von JavaFX demonstrieren. Im Mittelpunkt des Interesses stehen der Startprozess und die Art des Objektaufbaus:

Listing 12.1com/tutego/insel/javafx/HelloJavaFX.java

package com.tutego.insel.javafx;

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.effect.Reflection;
import javafx.scene.text.*;
import javafx.stage.Stage;

public class HelloJavaFX extends Application {

public static void main( String[] args ) {
launch( args );
}

@Override
public void start( Stage stage ) {
Text t = new Text( "Die Java-Insel grüßt JavaFX" );
t.setX( 10.0f );
t.setY( 50.0f );
t.setFont( Font.font( "Calibri", FontWeight.NORMAL, 30 ) );
t.setEffect( new Reflection() );

Group root = new Group( t );
Scene scene = new Scene( root, 400, 100 );
stage.setScene( scene );
stage.setTitle( "JavaFX Demo" );
stage.show();
}
}
Erstes Pixelquicky mit JavaFX

Abbildung 12.1Erstes Pixelquicky mit JavaFX

Eine JavaFX-Anwendung ist eine javafx.application.Application

JavaFX-Anwendungen erweitern die Basisklasse Application. Sie vererbt der eigenen Klasse Lebenszyklusmethoden wie init(), destroy(), start(…) oder stop(). Die Methoden werden je nach Wunsch überschrieben – wir überschreiben nur start(Stage).

Die eigene statische main(String[])-Methode leitet an die statische launch(String[])-Methode der Application-Klasse weiter und übergibt ihr alle Kommandozeilenoptionen. Da die Klassenmethode launch(…) weiß, in welcher Klasse sie aufgerufen wurde, erzeugt sie ein Exemplar dieser Klasse und ruft dann die Lebenszyklusmethoden auf. Soll launch(…) von der eigenen Klasse entkoppelt werden, lässt sich eine überladene Methode einsetzen, die über ein Class-Objekt eine andere zu startende JavaFX-Klasse bestimmt.

Start der Anwendung

JavaFX ruft im Lebenszyklus der JavaFX-Anwendung nach dem init() die Methode start(Stage primaryStage) auf. Unsere Klasse überschreibt start(…), um Programmcode abzuarbeiten und die grafische Ausgabe vorzubereiten. JavaFX übergibt der Methode eine Stage (zu Deutsch Bühne), was der Aufgabe eines Haupt-Containers zukommt und am ehesten mit dem Startfenster verglichen werden kann. Diesem Stage-Objekt kann wie bei einem Fenster ein Titel zugewiesen werden, auch die Ausmaße und Dekorationen, oder er kann in den Vollbildmodus gesetzt werden. Am wichtigsten ist aber die Zuweisung einer Szene, die auf den eigentlichen Inhalt verweist. Um eine Analogie zu gebrauchen: Die Szene ist die Leinwand und die Stage der Bilderrahmen mit Leinwand, also die gesamte Bühne. Während die primäre Stage von JavaFX kommt, sind wir es, die den Szenegraphen aufbauen, mit Elementen füllen und dann der Stage zuweisen.

[»]Hinweis

Während ein AWT- oder Swing-Programm selbst ein Fensterobjekt aufbaut, ist die Herangehensweise bei JavaFX fundamental anders. JavaFX baut das Fenster auf und übermittelt es einmalig in der start(Stage)-Methode. Dieses Stage müssen wir uns gut merken, denn alle Oberflächenelemente kommen später auf diesen Container. Stage ist bei Swing mit JFrame vergleichbar.

Der Szenegraph

Zentraler Dreh- und Angelpunkt bei JavaFX ist eine besondere Datenstruktur, genannt Szenegraph (engl. scene graph). Er nimmt grafische Objekte wie Linien, Flächen, Textfelder, Browser, 3D-Objekte auf und verwaltet sie. Zu jedem Zeitpunkt sind also alle grafischen Objekte einer JavaFX-Anwendung im Speicher präsent, und sie existieren nicht nur zum Zeitpunkt des Zeichnens. (Für sehr große Datenmengen lassen sich andere Lösungen finden, etwa dass die Grafiken gezeichnet werden und diese dann in den Szenegraphen gehängt werden.)

JavaFX repräsentiert über die Klasse Scene den Szenegraphen, der dann mit stage.setScene(scene) auf die Bühne kommt. Jetzt müssen nur noch die Objekte auf die Scene.

Auf die Bühne

Ein Szenegraph ist eine hierarchische Datenstruktur, die ein Wurzelelement haben muss. Daher wird bei Aufbau eines Scene-Objekts im Konstruktor ein Wurzelobjekt übergeben, das ist entweder ein einzelnes GUI-Element oder ein Container. Üblicherweise weisen wir Scene einen Knoten-Container vom Typ Group zu. Eine Group ist selbst ein Knoten, sodass sich Gruppen auch schachteln lassen – es ist das typische Composite-Pattern.

Group ist der Behälter für Knoten, die intern in einer beobachtbaren Datenstruktur gehalten werden. Diese Datenstruktur muss mit getChildren() erfragt werden – das Ergebnis ist eine ObservableList<Node> –, und daran können wir unsere Objekte hängen – ein direktes add(…) hat Group nicht. Group kann auch gleich im Vararg-Konstruktor alle Knoten annehmen.

Knoten

Alle Objekte im Szenegraphen sind vom Typ Node. Ein Untertyp von Node ist javafx.scene. shape.Shape, was Elemente wie Line, Text oder javafx.scene.control.Control repräsentiert, wozu Texteingabefelder oder Schaltflächen zählen.

Text-Objekte repräsentieren Beschriftungen, die über den Konstruktor oder über setContent(String) gesetzt werden können. Als Zeilentrenner wird »\n« unterstützt. Wir nutzen einige Setter im Beispiel:

  • setX(float)/setY(float) setzen die Koordinaten.

  • setFill(Paint) setzt eine Farbe oder Gradienten – bei Farben sind es javafx.scene.paint. Color-Objekte.

  • setFont(Font) setzt einen neuen Zeichensatz.

  • setEffect(…) setzt in unserem Fall einen Spiegeleffekt. Fast 20 Effekte bringt JavaFX mit, darunter GaussianBlur, Glow, SepiaTone oder Shadow.

Alle Knoten wie unser Textelement müssen dem Szenegraphen hinzugefügt werden, wozu wir sie der Group hinzufügen.

JavaFX versus Swing/AWT

Die Java2D-API brachte gegenüber dem AWT die Neuerung, dass es erstmalig grafische Objekte vom Typ java.awt.Shape gab. Sie können in einer Datenstruktur gesammelt werden und repräsentieren die Eigenschaften wie Koordinaten in einem Objekt. Linien mussten also nicht mehr direkt über drawLine() gezeichnet werden, sondern konnten als java.awt.geom.Line2D.Double-Objekte aufgebaut und verwaltet werden. JavaFX geht noch einen Schritt weiter und zeigt uns gar keinen Grafikkontext mehr, sondern gibt uns nur die Möglichkeit, Objekte zu sammeln und in den Graphen zu hängen. Dabei nutzt JavaFX auch Shape-Typen, aber nicht eine Schnittstelle java.awt.Shape mit Implementierungen im Paket java.awt.geom, sondern ganz eigene Typen – JavaFX hat mit den java.awt-Typen überhaupt nichts gemeinsam. So nutzt JavaFX auch eigene Typen für Farben und Fonts, etwa javafx.scene.paint.Color statt java.awt.Color.

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java SE 8 Standard-Bibliothek Java SE 8 Standard-Bibliothek
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Java ist auch eine Insel
Java ist auch eine Insel


Zum Rheinwerk-Shop: Professionell entwickeln mit Java EE 8
Professionell entwickeln mit Java EE 8


Zum Rheinwerk-Shop: Besser coden
Besser coden


Zum Rheinwerk-Shop: Entwurfsmuster
Entwurfsmuster


Zum Rheinwerk-Shop: IT-Projektmanagement
IT-Projektmanagement


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2018. Original - https://www.rheinwerk-verlag.de/openbook/
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

 
 


29.09.2022 - Sitemap.xml