Hallo zusammen,
entweder ich stehe auf dem Schlauch oder es ist tatsächlich eine komplexere Sache in JavaFX:
Ich verwende JavaFX (8) mit FXML und möchte in einer - bereits großen - FXML-Datei eine andere inkludieren - hauptsächlich um die Datei nicht größer werden zu lassen.
Beide sollen aber die gleiche Controller-Instanz verwenden.
Hier ein Beispiel dass es verdeutlichen soll:
Die Haupt-FXML-Datei welche den Controller hat:
Die Sub-FXML-Datei welche inkludiert wird:
Geladen wird die Haupt-FXML-Komponenten über FXMLLoader wo ich die Controller-Instanz auch direkt setze. Das heißt der Controller wird nicht vom FXML instanziiert.
Für die inkludierte FXML-Datei möchte ich nun auch gerne die gleiche Controller-Instanz verwenden.
Starte ich das Ganze jedoch nach dem obigen Schema, bekomme ich folgenden Fehler:
Die Stelle ist auch eindeutig: Dort wo im Sub-FXML die onAction-Deklaration ist hat er keinen Controller.
Kennt jemand eine Lösung oder hat sonstige Meinungen dazu? Ich kenne schon ein paar Workarounds, die arbeiten aber alle ohne ein fx:inlcude sondern laden das Sub-FXML separat und bauen die UI dann im Code zusammen.
Vielen Dank im Voraus!
entweder ich stehe auf dem Schlauch oder es ist tatsächlich eine komplexere Sache in JavaFX:
Ich verwende JavaFX (8) mit FXML und möchte in einer - bereits großen - FXML-Datei eine andere inkludieren - hauptsächlich um die Datei nicht größer werden zu lassen.
Beide sollen aber die gleiche Controller-Instanz verwenden.
Hier ein Beispiel dass es verdeutlichen soll:
Java:
public class DerController {
...
@FXML
public void buttonImHauptFXMLgeklickt() {
... ich werde gefunden
}
@FXML
public void buttonImSubFXMLgeklickt() {
... mich findet es nicht
}
}
Die Haupt-FXML-Datei welche den Controller hat:
Code:
<VBox ...>
<!-- viele UI-Komponenten -->
<Button text="Haupt fxml" onAction="#buttonImHauptFXMLgeklickt" />
<HBox>
<fx:include source="subFxml.fxml" />
</HBox>
</VBox>
Die Sub-FXML-Datei welche inkludiert wird:
Code:
<GridPane ....>
<!-- diverse UI-Kompenten -->
<Button text="Sub fxml" onAction="#buttonImSubFXMLgeklickt" />
</GridPane>
Geladen wird die Haupt-FXML-Komponenten über FXMLLoader wo ich die Controller-Instanz auch direkt setze. Das heißt der Controller wird nicht vom FXML instanziiert.
Für die inkludierte FXML-Datei möchte ich nun auch gerne die gleiche Controller-Instanz verwenden.
Starte ich das Ganze jedoch nach dem obigen Schema, bekomme ich folgenden Fehler:
Code:
Caused by: javafx.fxml.LoadException: No controller specified.
Kennt jemand eine Lösung oder hat sonstige Meinungen dazu? Ich kenne schon ein paar Workarounds, die arbeiten aber alle ohne ein fx:inlcude sondern laden das Sub-FXML separat und bauen die UI dann im Code zusammen.
Vielen Dank im Voraus!