为什么更改后我的javafx标签不显示?

我是javafx编程的新手,我不明白为什么更改时我的javafx Text不会得到更新。 我想制作一个从60到0的计时器。我正在尝试更改timeCounter文本,这是过去的每一秒。 帮助将不胜感激!

这是我的控制器代码:

E
qq11479366 回答:为什么更改后我的javafx标签不显示?

发生错误是因为标签已从显示的父节点中静默删除:

  1. 您有您的TimerUtil类扩展窗格(我不知道为什么)。
  2. 您将timeCounter文本添加到TimeUtil窗格中(同样,我也不知道为什么)。
  3. 将timeCounter文本添加到TimeUtil窗格中将以静默方式将其从FXML加载程序注入其中的父级中删除。
  4. 您可能只显示FXML加载程序注入的父级。
  5. 您永远不会显示TimerUtil窗格。
  6. 因此,即使您的时间轴上的文本正在更新,您也永远不会看到它。

要更好地了解您的错误,请阅读:

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);
    }
}
本文链接:https://www.f2er.com/2822199.html

大家都在问