Don't wanna be here? Send us removal request.
Text
Grafische Benutzeroberflächen mit JavaFX in Scenebuilder erstellen und in BlueJ einbinden
Programmieranfänger, die das Programmieren in Java mit BlueJ erlernen, werden nach einiger Zeit an den Punkt gelangen, Anwendungen mit grafischer Benutzeroberfläche zu als JavaFX-Applikation realisieren. Obwohl dies der richtige Zeitpunkt wäre, auf eine professionelle IDE wie IntelliJ umzusteigen, kann man die ersten Schritte auch in BlueJ gehen. Als weiteres Werkzeug kommt Gluons Scenebuilder zum Einsatz.
Hintergrund: Das MVC-Programmiermuster
Diagramm der Interaktionen innerhalb des MVC-Programmiermusters (Quelle: en.wikipedia.org/wiki/Model–view–controller).
Applikationen mit grafischen Benutzeroberflächen sind meist nach dem sogenannten MVC-Programmiermuster aufgebaut. MVC steht für Model-View-Controller und bezeichnet die Vorgehensweise, die Kernfunktionalität einer Anwendung (Model) von der Anwendungsdarstellung (View) und der Anwendungssteuerung (Controller) zu trennen. Die Mensch-Maschine-Interaktion wird von der Kernfunktionalität entkoppelt und kann - zumindest theoretisch - somit leichter an unterschiedliche Anwendungskontexte angepasst werden. Die Interaktion des Nutzers mit der Anwendung erfolgt über die grafische Benutzeroberfläche (View), die häufig als GUI (graphical user interface) bezeichnet wird. Davon wiederum entkoppelt ist die Behandlung von Ereignissen aus der Nutzerinteraktion (Controller). Jede Anwendung, die nach diesem Muster aufgebaut ist, wird letztlich mindestens 3 Klassen enthalten: eine für jeden der drei Teile.
Grundgerüst einer JavaFX-Anwendung
Damit eine Java-Anwendung als JavaFX-Applikation laufen und eine grafische Benutzeroberfläche erzeugen kann, muss sie in einem sogenannten JavaFX-Thread gestartet werden und eine Instanz der JavaFX-Basisklasse javafx.application.Application sein. Der folgende Quelltext zeigt das Grundgerüst so einer Klasse.
import javafx.application.Application;
/** * Die Hauptklasse einer JavaFX-Applikation * @author (Ihr Name) * @version (eine Versionsnummer oder ein Datum) */ public class Main extends Application {
// Ggf. hier Instanzvariablen deklarieren
/** * Init-Methode für die JavaFX-Applikation. * In dieser Methode werden Konstruktor-typische Initialisierungen vorgenommen. * Sie wird einmalig nach dem Launch der JavaFX-Applikation und nicht im JavaFX-Thread ausgeführt. * Deshalb DARF NICHT in dieser Methode die GUI erzeugt werden. */ public void init() throws Exception {
// Hier die Instanzvariablen initialisieren
}
/** * Start-Methode für die JavaFX-Applikation. * In dieser Methode wird insbesondere die grafische Benutzeroberfläche erzeugt. * Sie wird einmalig nach der Init()-Methode und im JavaFX-Thread ausgeführt. */ public void start(Stage stage) throws Exception {
// Hier die GUI initialisieren
}
/** * Stop-Methode für die JavaFX-Applikation. * In dieser Methode können "Aufräumarbeiten" vorgenommen werden. * Sie wird einmalig beim Beenden der Applikation und im JavaFX-Thread ausgeführt. */ public void stop() throws Exception {
// Hier Ressourcen frei geben, z.B. Streams schließen.
}
/** * Programmeinstiegspunkt fuer das Java-Programm. Es ist lediglich die launch()-Methode aufzurufen. * Initialisierungen passieren dann in der init()-Methode sowie der start()-Methode. Die MainLoop verbirgt * sich sozusagen in der Anwendung selbst. * Nach dem Ausstieg aus der "Mainloop" können notwendige Aufräumarbeiten in der stop()-Methode erfolgen. * * @param args Kommandozeilenparameter zu Übergabe an den Application Launcher */ public static void main(String [] args) {
launch(args);
}
// Hier weitere interne/private Methoden implementieren
}
JavaFX-Applikationen in BlueJ
JavaFX-Applikationen laufen als eigenständige Anwendungen. Sie können wie normale Java-Programme aber auch aus BlueJ heraus gestartet werden. Dazu muss BlueJ mitgeteilt werden, dass die Anwendung im JavaFX-Thread laufen soll. Das kann man in den Einstellungen festlegen. Anschließend kann man eine Anwendung als JavaFX-Application laufen lassen.
Die Registerkarte "Diverses" in den BlueJ-Einstellungen
Eine Klasse mittels Kontext-Menü als JavaFX-Application starten
Gestaltung einer GUI für eine JavaFX-Applikation mit dem Scenebuilder
Auf JavaFX aufbauende Benutzeroberflächen müssen nicht zwangsläufig als Java-Quelltext geschrieben werden. Statt dessen können sie in ihrer Struktur mit Hilfe von XML beschrieben und als FXML-Datei abgespeichert werden. Dafür gibt es unter anderem den Gluon-Scenebuilder. Er findet sich als Tool (Scenebuilder Kit) in professionellen Entwicklungsumgebungen, kann aber auch als separates Programm genutzt werden. Es gibt zahlreiche Tutorials, wie Benutzeroberflächen mit dem Scenebuilder erstellt werden können. Zumeist wird die Nutzung des Scenebuilders aus Entwicklungsumgebungen wie Eclipse oder Netbeans heraus eingeführt. Fast immer läuft der Scenebuilder dann aber als alleinstehende Anwendung.
youtube
Erstellung der GUI (View) aus einer FXML-Datei
Aus FXML-Dateien kann im Java-Quellcode die View erstellt werden. Dazu wird die Klasse FXMLLoader verwendet. Der folgende Quelltext-Ausschnitt zeigt, wie so etwas aussehen kann. Der richtige Ort in der Basisklasse der JavaFX-Applikation ist die Methode start().
...
...
...
/** * Start-Methode für die JavaFX-Applikation */ public void start(Stage stage) throws Exception {
String fxmlFile = "main.fxml";
try {
Parent root = FXMLLoader.load(getClass().getResource(fxmlFile)); Scene scene = new Scene(root); stage.setTitle("Meine JavaFX App"); stage.setScene(scene); stage.show();
} catch(IOException e) {
System.err.println("FXML-Ressource konnte nicht aus der Datei geladen werden: " + fxmlFile);
} catch(NullPointerException e) {
System.err.println("Beim Laden der FXML-Datei wurde kein Objekt der Basisklasse javafx.scene.Parent erzeugt.");
}
}
...
...
Erstellung der Controller-Klasse
Nach dem MVC-Programmiermuster muss es zu jeder View einen zugehörigen Controller geben. Der Scenebuilder stellt zu jeder gestalteten JavaFX-Szene ein passendes Grundgerüst für die zugehörige Controller-Klasse bereit. Dieses muss dann nur kopiert und im Quelltext-Editor eingefügt werden. Anschließend können die Methoden zur Ereignisbehandlung ausprogrammiert werden.
Eintragung eines Namens für die zu erstellende Controller-Klasse im Scenebuilder
Benennung einer Methode zur Behandlung eines Ereignisses im Scenebuilder
Der Menüpunkt "View" des Scenebuilder
Ansicht des Quelltext-Grundgerüstes für die Controller-Klasse im Scenebuilder
Die im Beispiel gezeigte Methode handleMenuItemQuit() wird dann in BlueJ ausprogrammiert, d.h. der Methodenrumpf wird so verändert, dass die gewünschte Funktionalität erreicht wird. Das könnte z.B. wie folgt aussehen.
...
...
...
/** * Ereignisbehandlung für den Menüpunkt Quit im Menü File * * @param e Ereignis vom Typ ActionEvent, * das diesen Eventhandler ausgelöst hat */ @FXML void handleMenuItemQuit(ActionEvent e) {
// Damit die folgende Anweisung funktioniert, muss die Klasse // javafx.application.Platform importiert werden. Platform.exit();
}
...
...
0 notes
Video
youtube
Läuft die Badewanne schneller aus, wenn man drin sitzen bleibt? Schaut selbst ...
0 notes
Text
Koelibri auf Tumblr
Wenn die Welt sich weiterdreht, soll man nicht verharren. Nachdem ich jahrelang mit Wordpress gebloggt habe, will ich mich jetzt mal auf Tumblr einlassen. Seid gespannt.!
0 notes