/ / ¿Cómo agrega nodos a un objeto que no es el padre principal (javafx)? - java, javafx, javafx-2, padre-hijo, nodos

¿Cómo se agregan nodos a un objeto que no es el padre principal (javafx)? - java, javafx, javafx-2, padre-hijo, nodos

No pude encontrar nada sobre el tema en ninguna partemiró. Me gustaría agregar un rectángulo a mi AnchorPane (anchorPaneOne) que está dentro de mi ScrollPane (scrollPane), pero todo lo que veo hacer sigo recibiendo errores.

Aquí está mi código:

Clase principal:

    package application;

import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;



public class Main extends Application {
@FXML
ScrollPane scrollPane;
@FXML
AnchorPane main;
@FXML
AnchorPane anchorPaneOne;
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("/fxml/Main.fxml"));
Scene scene = new Scene(root,600,400);
primaryStage.setScene(scene);
primaryStage.setTitle("Stack Overflow Example");
primaryStage.show();
Rectangle r = new Rectangle();
//It will not let me do anchorPaneOne.getChildren().add(r);
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}

Main.fxml:

    <?xml version="1.0" encoding="utf-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>


<AnchorPane fx:id="main" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<ScrollPane fx:id="scrollPane" prefHeight="400.0" prefWidth="600.0">
<content>
<AnchorPane fx:id="anchorPaneOne" minHeight="0.0" minWidth="0.0" prefHeight="800.0" prefWidth="585.0" />
</content>
</ScrollPane>
</children>
</AnchorPane>

Cualquier ayuda sería apreciada.
Gracias

Respuestas

2 para la respuesta № 1

El cargador necesita saber dónde inyectar elinstancias a - sin el campo anchorPaneOne no se puede crear una instancia y permanece nulo. Eso lo hace la propiedad del controlador que debe establecerse antes de cargar realmente la interfaz de usuario:

// create a loader
FXMLLoader loader = new FXMLLoader(getClass().getResource(resource));
// set this instance as its controller
loader.setController(this);
// load the ui
Parent root = loader.load();
Scene scene = new Scene(root, 600, 400);
primaryStage.setScene(scene);
primaryStage.setTitle("Stack Overflow Example");
primaryStage.show();
Rectangle r = new Rectangle(100, 100);
// now the field is instantiated and can be accessed without NPE
anchorPaneOne.getChildren().add(r);