ventanas varias usar example contenedores controller include nested javafx fxml

controller - varias - Controladores anidados JavaFx(FXML<incluir>)



usar fxml en java (2)

Gracias a Daniel (de OTN) encontré el error en mi código, los nombres de las variables de mi controlador estaban equivocados. Deberían ser <fx:id>Controller . En otras palabras, debería ser:

MainController.java

public class MainController extends Controller { @FXML private Window dialog1; @FXML private DialogController dialog1Controller; @FXML private Window dialog2; @FXML private DialogController dialog2Controller;

Pero al estudiar los changes introducidos en la versión 2.2 encontré que todo se puede resolver fácilmente usando la etiqueta <fx:root> ( como este tutorial ). Ingresé mi componente en FXML simplemente declarándolo así:

<HBox> <Dialog id="dialog1" text="Hello World!"/> <Dialog id="dialog2" text="Hello World!"/> </HBox>

Espero ser útil

En this tutotial, hay un ejemplo de cómo incluir componentes personalizados y usar sus controladores desde el controlador del contenedor.

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; ..

Si el componente está incluido solo una vez, funciona bien. Si el mismo componente se incluye dos veces, los controladores no se inicializan. Ambos controladores son nulos.

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;

¿Alguien podría ayudarme a resolver el problema? Gracias

Este es mi código de carga de FXML. Se ejecuta en el método de aplicación principal:

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(); }


Parece haber un error en netbeans 8.0 con fxmls anidados también. No se puede contar con netbeans para crear el objeto controlador del fxml anidado, se debe insertar manualmente en su MainController. Cada vez que se actualiza el controlador en netbeans, se borra, por lo que puede ser tedioso. Para este ejemplo que sería insertar el

@FXML private DialogController dialog1Controller;

línea manualmente en el controlador principal en este caso, entonces funciona normalmente. Muy útil para organizar grandes controladores / fxmls.