usar start java javafx-2 fxml

usar - start fxml java



JavaFX: FXML: ¿Cómo hacer que el niño extienda su tamaño para que se ajuste al panel principal? (4)

He logrado cargar un fxml secundario (sub UI) bajo un fxml principal (mainMenu UI). He creado un AnchorPane con id "mainContent". Este panel está enlazado a 4 lados y cambia de acuerdo con el escenario.

La ventana secundaria se cargará en el anchorpane "mainContent". Sin embargo, no puedo averiguar cómo hacer que el niño cambie junto con su "mainContent" principal.

La IU de mi hijo se llama así.

@FXML private void mnuUserLevel_onClick(ActionEvent event) { FXMLLoader loader = new FXMLLoader(getClass().getResource("DBedit.fxml")); loader.setController(new DBeditEntityUserlevel()); try { Node n = (Node)loader.load(); mainContent.getChildren().add(n); } catch (IOException e){ System.out.println(e.getMessage()); } }

Para ilustrar mejor mi pregunta, por favor vea mi instantánea. El cuadrado rojo es el niño. El cuadrado amarillo es el "mainContent" AnchorPane del elemento principal de MainMenu.


Con el aspecto de la estructura de su interfaz, creo que es mejor que utilice BorderPane como su contenedor principal con esta sugerencia. No use AnchorPane directamente dentro del contenedor de BorderPane. Aquí le sugiero que lo haga:

-> BorderPane-Top = "su menú"

-> BorderPane-Center = otro contenedor (podría ser SplitPane, otro BorderPane, etc. pero no AnchorPane, supongo, pero puedes intentarlo si quieres)

-> BorderPane-Bottom = otro contenedor (podría ser hbox con botones o etiquetas para información o notificaciones, etc.)


Podrías intentar con el ajuste de prefwidth. No sé por qué, pero parece que toma el prefwidth establecido en SceneBuilder después de hacer referencia a su newPane a su AnchorPane.

Node newPane = FXMLLoader.load(getClass().getResource("view/YourPane.fxml")); List<Node> parentChildren = ((Pane)yourAnchorPaneId.getParent()).getChildren(); parentChildren.set(parentChildren.indexOf(yourAnchorPaneId), newPane); yourAnchorPaneId.setPrefWidth(1800); // 1800 just example value for test Main.primaryStage.setWidth(500); // 500 example value with which you wishe to start app


Si establece los valores de topAnchor, bottomAnchor, leftAnchor, rightAnchor del panel dentro de su AnchorPane a 0.0, el panel se estirará hasta la extensión completa del AnchorPane circundante.

Enlace de documentación: AnchorPane

editar: en el enlace de documentación también puede ver cómo puede configurar estos valores en su código Java.

Ejemplo de FXML:

<AnchorPane fx:id="mainContent" ...> <StackPane fx:id="subPane" AnchorPane.topAnchor="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" ></StackPane> </AnchorPane>


Si tiene una Region , que es una subclase de Node que incluye Axis , Chart , Control y Pane (esto probablemente incluya cualquier cosa que quiera cargar), puede vincular el tamaño del niño al espacio en el padre, de manera similar a como lo hacen. hice here Ahora cualquier ajuste futuro del tamaño del padre se reflejará en el niño.

Region n = (Region)loader.load(); mainContent.getChildren().add(n); n.prefWidthProperty().bind(mainContent.widthProperty()); n.prefHeightProperty().bind(mainContent.heightProperty());