JavaFX FXML Controller: Unterscheidung der Rollen von Konstruktor und Initialisierungsmethode
In JavaFX wird FXML verwendet, um Benutzeroberflächen deklarativ zu erstellen. Eine Controller-Klasse, wie im fx:controller-Attribut der FXML-Datei angegeben, dient als Interaktionslogik für die GUI-Elemente. Zwei Lebenszyklusmethoden, der Konstruktor und die Methode initialize(), spielen eine wichtige Rolle bei der Initialisierung des Controllers.
Der Konstruktor wird zuerst aufgerufen, gefolgt von der Injektion von @FXML-Feldern mit ihren entsprechenden Java-Objekten. Anschließend wird die Methode initialize() ausgeführt.
Konstruktor vs. Methode Initialize
Der Hauptunterschied zwischen dem Konstruktor und der Methode initialize() liegt im Timing von deren Ausführung und deren Zugriff auf FXML-Annotationen. Der Konstruktor wird zuerst ausgeführt, kann jedoch nicht auf mit @FXML annotierte Felder zugreifen. Auf diese Felder kann nur innerhalb der initialize()-Methode zugegriffen werden.
Dadurch kann der Konstruktor Aufgaben vor der FXML-Komponenteninjektion ausführen, während die initialize()-Methode auf diese injizierten Komponenten zugreifen und diese bearbeiten kann.
Praktische Verwendung
Der Konstruktor sollte für Aufgaben verwendet werden, die ausgeführt werden müssen, bevor die GUI vollständig geladen ist, wie zum Beispiel das Lesen von Daten aus einer Datenbank. Die Methode initialize() hingegen eignet sich zum Initialisieren der GUI-Komponenten, z. B. zum Festlegen von Ereignishandlern oder zum Ändern ihrer Standardwerte.
Beispiel
Bedenken Sie der folgende Code:
public class MainViewController { // Constructor public MainViewController() { System.out.println("first"); } // Initialize method @FXML public void initialize() { initializeComponents(); System.out.println("second"); } private void initializeComponents() { // Initialize GUI components, e.g., add event handlers } }
In diesem Beispiel gibt der Konstruktor „first“ aus, bevor Java-Objekte in die FXML-Annotation eingefügt werden Felder. Anschließend gibt die Methode initialize() „second“ aus, nachdem diese Felder eingefügt wurden. Dies demonstriert die sequentielle Ausführung dieser Lebenszyklusmethoden.
Das obige ist der detaillierte Inhalt vonJavaFX FXML: Konstruktor vs. „initialize()'-Methode – Was ist der Unterschied?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!