JavaFX enthalten fxml in fxml ohne controller
Ich bin die Programmierung einer Anwendung mit javafx.
Es ist ein "Multi-Screen" - Anwendung mit einem Hauptmenü, von wo ich wechseln kann und meine Szene.
Meine Szenen definiert werden, die in verschiedenen fxml-Dateien.
Weil ich versuche, die Verwendung des mvc-pattern habe ich nicht den controller im fxml-Dateien, die ich verwenden setController auf dem FXMLloader.
Alles ist in Ordnung, aber ich habe das mainmenu und alle seine Funktionen für die onActions in separaten controller und in separaten fxml-Datei.
Ich habe es versucht mit
<fx:include source="Menubar.fxml"/>
erstellt und einen controller für das fxml-Datei, wenn ich den controller im fxml-Datei kann ich nicht den Quellcode kompilieren. Wie kann ich den controller für die im Lieferumfang enthaltenen fxml Datei?
startpage.fxml bekommt seine controller "Startpage" mit
FXMLLoader loader = new FXMLLoader(getClass().getResource("../fxml/startpage.fxml"));
loader.setController(new Startpage(m));
Pane mainPane = loader.load();
startpage.fxml
umfasst menubar.fxml
, wie ein controller für die menubar-Steuerelemente jetzt? Oder wie die menubarController leicht in jedem anderen controller?
InformationsquelleAutor Garog | 2015-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie brauchen, um eine
controllerFactory
im loader um zu erreichen, was Sie hier wollen. Wenn Sie eincontrollerFactory
geben Sie den Klassennamen des Controllers der FXML-Dateien, aber die controller factory können Sie Steuern, wie das zugeordnet ist, ein Objekt (so können Sie immer noch es konstruieren Sie ein Modell, etc). Wenn Sie angeben, dass einecontrollerFactory
für eineFXMLLoader
, die Fabrik wird auch verwendet, um erstellen Sie die Controller für alle<fx:include>
s, dass Sie in der FXML-Datei.Beachten Sie abschließend, dass Sie gelingen kann, den controller für die im Lieferumfang enthaltenen fxml-Datei in der "main" - fxml-Datei dokumentiert, wie in der "Verschachtelte Controller" - Abschnitt der FXML-Dokumentation.
Also, wenn startpage.fxml sieht wie folgt aus:
- und Menubar.fxml sieht aus wie
Dann können Sie die Instanziierung der Klassen controller mit:
Nun, Sie haben tatsächlich Verweise auf beide Controller in Ihrer Anwendung code, wenn Sie müssen, aber Sie können auch tun
So dass der main-controller hat jetzt ein Verweis auf die menu-bar controller.
Ich kann nicht wirklich helfen, es sei denn, ich kenne die Teile, die Sie nicht verstehen. Jeder fxml-Datei hat einen einzigen controller Instanz zugeordnet. Der fxml-Datei angeben können, die eine Klasse für den controller. Also der controller factory ist eine Funktion, die sagt, die
FXMLLoader
wie man die controller-Instanz aus der angegebenen Klasse. Duplizieren von Methoden, oder macht ein controller eine Unterklasse der anderen ist, wird nicht helfen, denn Sie haben noch zwei verschiedene controller-Instanzen (so dass Sie nicht, verweisen auf die gleichen Daten).Die größten Probleme für mich sind, zu verstehen, Ihre Lösung (nur ein java-Anfänger) und/oder passen Sie sich Ihrem Beispiel zu meinem code. Ich werde versuchen zu erklären, ein bisschen mehr warum brauche ich das alles. Zuerst, als ich begann, das Projekt, alle fxml-Datei hatte seine eigene Steuerung, das war in Ordnung, ich könnte auch jeden fxml in jedem anderen ohne Verlust von Funktionen. zum Beispiel, ich hatte eine Seite in der Anwendung "createproject" diese Seite enthält einige Textfelder enthalten und die Menüleiste. wenn ich die menuitems wechseln Sie die Seite (- Szene) "settingsforcreateproject" ich die menubar in der neuen fxml wieder.
e schauen Sie hier, gist.github.com/Garog/ee979f4c50c76c554f86 alles war in Ordnung und angenehmer ist dann das arbeiten mit swing-oder awt-aber dann brauchte ich die Daten in eine Szene von Szene b, wie die Einstellungen aus dem Einstellungen-Szene in der projectcreate Szene. ich erstellte mir ein Modell in meiner main-Klasse und dann.. die Probleme begannen, wie das Modell zwischen dem controller. ich sah mich um und fand einige Lösungen, die gut klingen, man den controller einstellen, den stackoverflow.com/a/14190310/3710098 aber diese Lösung funktioniert nicht mit fxml gehören fxml.. und hier steh ich jetzt..
Nun ja, meine Lösung macht genau das: stellt ein Modell zwischen "Haupt -" und dem controller für die im Lieferumfang enthaltenen fxml. Welche Teile des Codes verstehst du nicht?
InformationsquelleAutor James_D