JavaFX绑定时间线显示问题

时间:2015-09-29 10:40:01

标签: java javafx-2

我正在创建一个小型的游戏,我已经创建了以下方法来开始一轮:

private void startRound(){
    int playerStarting = rnd.nextInt(2) + 1;
    imageBox.managedProperty().bind(imageBox.visibleProperty());

    imageBox.setVisible(false);

    VBox timeBox = new VBox();
    Label timeLabel = new Label();
    timeLabel.setId("RoundTimer-Label");
    timeBox.setAlignment(Pos.CENTER);

    timeBox.getChildren().add(timeLabel);
    gr.add(timeBox, 1, 0, 1, 4);

    Timeline tl = new Timeline(1);
    tl.getKeyFrames().add(new KeyFrame(Duration.seconds(3)));
    timeLabel.textProperty().bind(tl.currentTimeProperty().asString());

    tl.playFromStart();

    timeLabel = null;
    timeBox = null;

    imageBox.setVisible(true);
}

除了一个问题外,一切都正常运行。

tl.currentTimeProperty().asString();

将数字显示为1000.7毫秒和2001毫秒,我强烈希望如果不是这样的话。但是因为currentTimeProperty是一个属性,所以我没有像.divide(1000)这样的内置运算符可以在它上面使用,而且我不能将我的标签文本绑定到Duration本身,即使它确实有.divide( 1000)方法。有什么我在这里缺少的或者我应该采用一种全新的方式吗?感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用Bindings进行所需的任何转换。

timeLabel.textProperty().bind(
        Bindings.createStringBinding(() -> String.format("%f", Double.valueOf(tl.currentTimeProperty().get().toMillis())/1000.0), tl.currentTimeProperty())
);

答案 1 :(得分:0)

您可以向currentTimeProperty()添加一个监听器,然后使用getCurrentTime()设置标签上的当前时间:

tl.currentTimeProperty().addListener(ov -> {
     timeLabel.setText(String.valueOf((int)tl.getCurrentTime().toSeconds()))
});