在我的应用程序中,我每秒创建一个新的匿名标签,立即将其添加到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
*/
}