W języku angielskim jest przykładem, jak dołączyć niestandardowe komponenty i używać ich kontrolerów z kontrolera kontenera.Kontrolery zagnieżdżone JavaFx (FXML <include>)
main_window_content.fxml
<VBox fx:controller="com.foo.MainController">
<fx:include fx:id="dialog" source="dialog.fxml"/>
...
</VBox>
MainController.java
public class MainController extends Controller {
@FXML private Window dialog;
@FXML private DialogController dialogController;
..
Jeśli składnik jest zawarty tylko raz, to działa dobrze. Jeśli ten sam komponent jest uwzględniony dwukrotnie, kontrolery nie są inicjowane. Oba kontrolery mają wartość NULL.
main_window_content.fxml
<VBox fx:controller="com.foo.MainController">
<fx:include fx:id="dialog1" source="dialog.fxml"/>
<fx:include fx:id="dialog2" source="dialog.fxml"/>
...
</VBox>
MainController.java
public class MainController extends Controller {
@FXML private Window dialog1;
@FXML private DialogController dialogController1;
@FXML private Window dialog2;
@FXML private DialogController dialogController2;
Może ktoś mi pomóc rozwiązać ten problem? dziękuje
To jest mój kod ładowania FXML. Jest on wykonany w głównej metody aplikacji:
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("main_window_content.fxml"));
stage.setTitle("FXML Welcome");
stage.setScene(new Scene(root, 300, 275));
stage.show();
}
Druga odpowiedź jest właściwym rozwiązaniem dla tego pytania. Powinna być oznaczona jako "Zaakceptowana". –
@AmirArad Która z nich jest "druga"? – glglgl