标签上的JavaFX Fade Transition没有做任何事情

时间:2016-05-13 22:42:36

标签: java javafx label

enter code here我希望标签从未显示(0.0)过渡到显示(1.0)

    @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();

}

这是app类

package com.ben.main;

public class App扩展了Application {

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);
}

}

我是否还必须将它添加到场景中?我遇到了麻烦,目前只是输入内容来更新编辑。

1 个答案:

答案 0 :(得分:1)

FXML loading process for controllers通过反思来运作。它将调用名为initialize()的方法。它不会知道任何关于名为init()的方法,因此永远不会调用它。因此,您应该将方法名称从init()更改为initialize()

  

我在加载FXML文件后调用init方法。

是的,现在可以通过您添加到问题中的其他代码看到。

但是,你在一个不是由FXMLLoader创建的控制器的新实例上调用init,而不是在FXMLLoader创建的控制器上调用init。使用new创建的控制器实例不会以任何方式与场景图关联。

因此,不要这样做,不要使用new创建新的控制器。而是使用由加载器创建的控制器。

如果你想获得FXMLLoader加载的控制器的引用,你应该从加载器中获取它,如下面的答案所示:

相关部分复制并粘贴在下面:

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);

只需根据代码调整上面的模式。