JavaFX - Slider行为在哪里实现以及如何利用它?

时间:2017-11-04 20:47:29

标签: java javafx slider javafx-8 media-player

我有一个Slider,每隔几毫秒在我的代码中更新一次,因为它显示了MediaPlayer的当前进度,但是当用户调整Slider时,它应该寻找。

当前实施

MutableBoolean seeking = new MutableBoolean();
seekSlider.setOnMousePressed(e -> seeking.setTrue());
seekSlider.setOnMouseReleased(e -> { 
    player.seek(Duration.millis(seekSlider.getValue())); 
    Platform.runLater(() -> seeking.setFalse());
});

player.addPlaybackTimeListener(time -> {
    if(seeking.isFalse())
        seekSlider.setValue(time.toMillis());
});

但这并不理想,因为它仅适用于鼠标控制,而不适用于使用键盘调节滑块(左箭头和右箭头)。当试图添加它时,它完全失败,因为键调整被简单地覆盖:

seekSlider.setOnKeyPressed(e -> player.seek(Duration.millis(seekSlider.getValue())));

问题

现在我想知道是否有办法通常检测用户何时更改Slider的值。在查看Slider类时,我意识到那里绝对没有逻辑,只有属性。这导致了两个问题:

  1. 所有Slider逻辑在哪里?
  2. 我可以以允许持续更新的方式绑定到它,同时用户仍然可以进行任何手动调整吗?
  3. 我也发现了这个问题:JavaFX - Set Slider value after dragging mouse button但它也不适用于密钥更改。

0 个答案:

没有答案