Meine Application
Klasse 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 FXMLLoader
erstellt eine Instanz des entsprechenden Controllers (in der FXML
Datei über angegeben fx:controller
), indem zuerst der Standardkonstruktor und dann die initialize
Methode 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 initialize
Methode? Was ist der Unterschied zwischen der Verwendung eines Konstruktors oder der initialize
Methode 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@FXML
Variablen. Sicher, er macht es in der Startmethode und nicht im Konstruktor, würde aberinitialize()
in seinem Fall irgendeinen Nutzen bringen?