2017-11-16 15 views
4

Ich habe eine Weile gesucht und ich konnte nicht bekommen, was ich machen wollte. Ich habe das javafx-Framework verwendet, um fxml in javafx in diesem Thread 'Loading new fxml in the same scene' mit etwas Erfolg zu wechseln. Ich meine, ich habe ein Hauptfenster und dieses Fenster hat zwei verschiedene Bereiche, den MAIN-Bereich und den CONTENT-Bereich.Laden mehrerer fxml in javafx

Der MAIN-Bereich bleibt in der gesamten Anwendung gleich, aber der CONTENT-Bereich wird sich ständig ändern. Mein MAIN-Bereich hat nur eine Symbolleiste, und je nachdem, auf welche Schaltfläche in der Symbolleiste Sie klicken, ändert sich die fxml (und das Verhalten) im CONTENT-Bereich.

Ich habe bereits dieses Verhalten und es funktioniert wie ein Charme mit dem genannten Framework.

Die Sache ist, dass ich möchte, dass alle meine CONTENT-Bereiche auch eigene MAIN-Bereiche und eigene CONTENT-Bereiche haben können. Und abhängig davon, was Sie in diesen zweiten MAIN-Bereichen tun, ändert sich auch die fxml und das Verhalten in diesen zweiten CONTENT-Bereichen.

Ich weiß nicht, ob das Framework, das ich verwende, genug ist und ob ich in der Lage sein werde, das zu bekommen, was ich damit machen will.

Kennen Sie ein anderes Framework, das mir helfen könnte, diese Funktionalität zu bekommen?

Vielen Dank im Voraus!

+0

Es ist nicht wirklich klar, was Sie hier fragen. Haben Sie versucht, den Ansatz zu verwenden, der für dieses Szenario bereits funktioniert? Wenn ja, funktioniert das, und wenn nicht, was läuft dann besonders schief? –

+0

Es funktioniert nicht, weil das Framework alle Attribute und Methoden statisch hat. Und es muss von einer JavaFX-Anwendungsklasse initialisiert werden, und wenn Sie fxml austauschen und ein neues untergeordnetes fxml "importieren", ist es selbst keine JavaFX-Anwendung, daher können Sie von dort aus keine neue Framework-Instanz initialisieren. Und Sie können die ursprüngliche Framework-Instanz nicht verwenden, da Sie die vorherigen Werte dafür überschreiben würden. Ich werde versuchen, meine Frage so schnell wie möglich zu bearbeiten, um es zu klären. – JFValdes

Antwort

3

Jeder .fxml, den Sie laden, kann seinen eigenen Controller haben. Jeder Controller kann benutzerdefinierte Aktionen und Ladecodes haben, genau wie Ihr Hauptprogramm.

Grundsätzlich ist JavaFX modular aufgebaut. Wenn in Ihrem Hauptbereich etwas möglich ist, ist dies auch bei allen Kindern möglich.

Im Allgemeinen ist es in UI-basierten Frameworks ratsam, eine Hierarchie von Controllern zu erstellen, die die Hierarchie ihrer jeweiligen Komponenten widerspiegelt. Wenn Sie den untergeordneten Controller für das untergeordnete Element abrufen möchten (z. B. um den Verweis an den übergeordneten Controller zu übergeben), können Sie sich nicht auf die Verknüpfung FXML.load() verlassen. Sie müssen die längere Syntax von:

verwenden
FXMLLoader loader = new FXMLLoader(getClass().getResource("your.fxml")); 
YourPaneType pane = loader.load(); 
YourControllerType controller = loader.getController();