为什么即使将标签宽度添加到场景中后也不能得到标签宽度?

时间:2018-12-06 13:38:39

标签: java javafx

在我的应用程序中,我每秒创建一个新的匿名标签,立即将其添加到TranslateTransition和场景中,并将其保存在ArrayList中。我还将每个Random都将它们放置在X轴上的某个位置。我把它们交给TT之后我当然想将Label放置在舞台的内部,所以我计算了我的场景宽度减去Labels宽度,但是即使将其添加到场景中,我也得到0作为Label宽度。 我必须在哪里放置label.getWidth()方法,以便它提供实际的宽度。 发生这种情况的位置在时间轴内的KeyFrame中,如下所示:

public void insideKeyFrame()
{
    i++;
    labels.add(new Label());
    labelsIndex = labels.size() - 1;
    gameStage.getChildren().add(labels.get(labelsIndex));

    tt = new TranslateTransition(Duration.millis(calculateSpeed()),
                                 labels.get(labelsIndex));
    tt.setFromY(-50);
    tt.setToY(Main.root.getScene().getHeight() + 50);

    labels.get(labelsIndex).setText(generator.getGeneratedString());
    labels.get(labelsIndex).setTranslateY(-50);
    labels.get(labelsIndex).setTranslateX(new Random().nextInt((int) (Main.root.getScene().getWidth() - labels.get(labelsIndex).getWidth())));
    labels.get(labelsIndex).getStyleClass().setAll("label-rainString");

    tt.setOnFinished(e ->
    {
        System.out.println("onFinished: " + tt.getOnFinished());
        gameStage.getChildren().remove(labels.get(0));
        labels.remove(0);
    });

    tt.play();

    System.out.println(gameStage.getChildren());
    System.out.println("Labels size: " + labels.size());
    System.out.println("Label Index size: " + labelsIndex);
    System.out.println("Label width: " + labels.get(labelsIndex).getWidth());
    System.out.println("---------------------------------");
    System.out.println();
}

时间轴本身如下所示:

public void handleRainTransition()
{
    inputTextField.clear();
    labelStage.getChildren().remove(startLabel);

    /*
     * the Timeline for the new Labels
     * that get saved in the ArrayList<>
     */
    if (timeline != null)
        timeline.stop();

    timeline = new Timeline();
    timeline.setCycleCount(Timeline.INDEFINITE);
    timeline.getKeyFrames().add(
            new KeyFrame(Duration.seconds(1), e ->
                 {
                     insideKeyFrame();
                 }));
    timeline.play();
    /*
     * Timeline ends here
     */
}

0 个答案:

没有答案