Meine ApplicationKlasse sieht so aus:
public class Test extends Application {
private static Logger logger = LogManager.getRootLogger();
@Override
public void start(Stage primaryStage) throws Exception {
String resourcePath = "/resources/fxml/MainView.fxml";
URL location = getClass().getResource(resourcePath);
FXMLLoader fxmlLoader = new FXMLLoader(location);
Scene scene = new Scene(fxmlLoader.load(), 500, 500);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Das FXMLLoadererstellt eine Instanz des entsprechenden Controllers (in der FXMLDatei über angegeben fx:controller), indem zuerst der Standardkonstruktor und dann die initializeMethode aufgerufen werden:
public class MainViewController {
public MainViewController() {
System.out.println("first");
}
@FXML
public void initialize() {
System.out.println("second");
}
}
Die Ausgabe ist:
first
second
Warum gibt es die initializeMethode? Was ist der Unterschied zwischen der Verwendung eines Konstruktors oder der initializeMethode zum Initialisieren der für den Controller erforderlichen Dinge?
Vielen Dank für Ihre Vorschläge!
FXMLLoader, richtig? Ich sehe also keinen Vorteil darin, auf dieinitialize()- Methode zu warten . Sobald die FXML geladen ist, hat der folgende Code Zugriff auf die@FXMLVariablen. Sicher, er macht es in der Startmethode und nicht im Konstruktor, würde aberinitialize()in seinem Fall irgendeinen Nutzen bringen?