2016-05-13 4 views
0

enter code here Ich möchte ein Label von nicht für den Übergang (0,0) auf gezeigt wird gezeigt werden (1,0)JavaFX Fade Transition auf dem Etikett nichts tut

@FXML 
private Label welcomeLabel; 

public FadeTransition ft = new FadeTransition(Duration.millis(3000)); 


public void init(){ 

    ft.setNode(welcomeLabel); 

    ft.setFromValue(0.0); 
    ft.setToValue(1.0); 
    ft.setCycleCount(1); 
    ft.setAutoReverse(false); 

    ft.play(); 

} 

Hier ist die App Klasse

package com.ben.main; 

public class App erweitert Anwendung {

private Stage primaryStage; 
private Scene loginScene; 
LoginUIController loginUIController = new LoginUIController(); 

public void start(Stage primaryStage) { 

    this.primaryStage = primaryStage; 

    initApp(); 
    loginUIController.init(); 

} 

private void initApp() { 

    Parent root = null; 

    try { 
     root = FXMLLoader.load(getClass().getResource("loginUIFXML.fxml")); 
    } catch (IOException e){ 
     System.err.println("There was an error... " + e); 
    } 

    loginScene = new Scene(root); 

    primaryStage.setTitle("project"); 
    primaryStage.setResizable(false); 
    primaryStage.setScene(loginScene); 
    primaryStage.show(); 


} 

public static void main(String[] args) { 
    launch(args); 
} 

}

Muss ich es hier auch zur Szene hinzufügen? Ich habe Probleme und schreibe gerade Sachen, um die Bearbeitung zu aktualisieren.

+0

Ich denke, 1 Millisekunde ist zu kurz, um eine Änderung zu bemerken ... – jns

+0

Nein, ich habe getestet, ob es mit anderen Werten funktionieren würde. Der ursprüngliche Wert war 3000 und es hat auch nicht funktioniert. –

+0

Ist welcomeLabel zu einer 'Szene' hinzugefügt? Wo nennst du 'init'? – jns

Antwort

1

Die FXML loading process for controllers funktioniert durch Reflexion. Es wird eine Methode mit dem Namen initialize() aufgerufen. Es wird nichts über eine Methode namens init() wissen und würde das niemals so nennen. Sie sollten also Ihren Methodennamen von init() in initialize() ändern.

Ich rufe die init-Methode nach dem Laden der FXML-Datei.

Ja, das kann jetzt mit dem zusätzlichen Code gesehen werden, den Sie zu Ihrer Frage hinzugefügt haben.

Sie rufen jedoch init auf einer neuen Instanz eines Controllers auf, der nicht vom FXMLLoader erstellt wird, anstatt init auf dem vom FXMLLoader erstellten Controller aufzurufen. Die Instanz des Controllers, die Sie mit new erstellt haben, ist in keiner Weise mit dem Szenegraph verknüpft.

Also, tun Sie das nicht, erstellen Sie keinen neuen Controller mit new. Verwenden Sie stattdessen den Controller, der vom Loader erstellt wird.

Wenn Sie einen Verweis auf den Controller zu bekommen, die durch die FXMLLoader geladen wurde, sollten Sie es von dem Lader bekommen, wie durch die folgende Antwort Beispiel:

Die relevante Teile davon sind kopieren und eingefügt:

FXMLLoader loader = new FXMLLoader(
    getClass().getResource(
    "customerDialog.fxml" 
) 
); 

Stage stage = new Stage(StageStyle.DECORATED); 
stage.setScene(
    new Scene(
    (Pane) loader.load() 
) 
); 

CustomerDialogController controller = 
    loader.<CustomerDialogController>getController(); 
controller.initData(customer); 

Passen Sie einfach das obige Muster für Ihren Code.

+0

Ich rufe die init-Methode nach dem Laden der FXML-Datei auf. –