我是javafx编程的新手,我不明白为什么更改时我的javafx Text不会得到更新。 我想制作一个从60到0的计时器。我正在尝试更改timeCounter文本,这是过去的每一秒。 帮助将不胜感激!
这是我的控制器代码:
E
我是javafx编程的新手,我不明白为什么更改时我的javafx Text不会得到更新。 我想制作一个从60到0的计时器。我正在尝试更改timeCounter文本,这是过去的每一秒。 帮助将不胜感激!
这是我的控制器代码:
E
发生错误是因为标签已从显示的父节点中静默删除:
要更好地了解您的错误,请阅读:
从Node
Javadoc:
如果程序将子节点添加到父节点(包括组,区域等),并且该节点已经是其他父节点的子节点或场景的根节点,则该节点会自动(且无提示)从其节点中删除前父母。
修复错误后,基本概念对我有用。这是我根据您的代码创建的可运行示例:
import javafx.animation.*;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Timer extends Application {
private int tmp = 60;
private Text counter = new Text();
private Timeline animation = new Timeline(
new KeyFrame(Duration.seconds(1),e -> updateCounter())
);
@Override
public void start(Stage stage) {
animation.setCycleCount(Timeline.INDEFINITE);
animation.play();
StackPane layout = new StackPane(counter);
layout.setPadding(new Insets(20));
stage.setScene(new Scene(layout));
stage.show();
}
private void updateCounter() {
if (tmp > 0){
tmp--;
} else {
animation.stop();
}
counter.setText(String.valueOf(tmp));
System.out.println(tmp);
}
public static void main(String[] args) {
launch(args);
}
}