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);
}
}
我是否还必须将它添加到场景中?我遇到了麻烦,目前只是输入内容来更新编辑。
答案 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);
只需根据代码调整上面的模式。