【问题标题】:Event listener getting in way of changing slider value JavaFX事件侦听器妨碍更改滑块值 JavaFX
【发布时间】:2020-05-12 09:01:24
【问题描述】:

我正在使用 JavaFX 的 MediaPlayer 类制作一个随着歌曲播放而移动的滑块。这完全正常,滑块随着歌曲移动。如果拖动滑块,它会更改歌曲的位置(使用 .seek() 方法)。唯一的问题发生在我单击滑块时。歌曲没有移动,我认为这是因为看着歌曲位置的听众仍在移动,这正在将滑块移动到下一个位置。我认为这阻止了用户的点击,但我不确定如何解决它。这是否意味着暂停听众或我不确定的事情?

protected void updateValues() {
            if (playTime != null && progressBar != null && volume != null) {
               Platform.runLater(new Runnable() {
                  public void run() {
                    Duration currentTime = player.getCurrentTime();
                    duration = player.getMedia().getDuration();
                    playTime.setText(formatTime(currentTime, duration));
                    progressBar.setDisable(duration.isUnknown());
                    if (!progressBar.isDisabled() 
                      && duration.greaterThan(Duration.ZERO) 
                      && !progressBar.isValueChanging()) {
                        progressBar.setValue(currentTime.divide(duration).toMillis()
                            * 100.0);
                    }
                  }
               });
            }
    }

progressBar.setOnMouseReleased(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            player.seek(duration.multiply(progressBar.getValue()/100.0));
        }
});

如果有帮助,我已经关注了:https://docs.oracle.com/javafx/2/media/playercontrol.htm

【问题讨论】:

标签: java javafx slider listener


【解决方案1】:

我怀疑您需要添加 setOnMouseClicked 才能触发鼠标点击事件,

progressBar.setOnMouseClicked(e -> 
    player.seek(duration.multiply(progressBar.getValue()/100.0))
);

如果您想同时使用鼠标事件来处理这两种情况,您可能需要添加两个鼠标事件处理程序setOnMouseReleased(用于拖动并释放您的滑块)和setOnMouseClicked(用于单击您的滑块)。但我建议您在滑块中添加ChangeListener,而不是设置鼠标事件侦听器。

progressBar.valueProperty().addListener((observable, oldValue, newValue) ->
    player.seek(duration.multiply(newValue.doubleValue()/100.0))
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多