【问题标题】:Javafx Slider event listener being called before it snaps to the nearest tick在捕捉到最近的刻度之前调用 Javafx Slider 事件侦听器
【发布时间】:2015-04-14 21:26:16
【问题描述】:

每次更改Slider 值时,我都会尝试更新一些信息,因此我将代码设置如下:

int betAmount = 0;
Slider betSlider = new Slider();
betSlider.setMinorTickCount(4);
betSlider.setMajorTickUnit(250);
betSlider.setSnapToTicks(true);

betSlider.valueChangingProperty().addListener((obs, wasChanging, isChanging) -> {
    if (!isChanging) {
        betAmount = (int) betSlider.getValue();
        update(); //update method, not relevant to problem
    }
});

我遇到的问题是我的滑块上的getValue() 方法在它捕捉到最近的刻度之前被调用了。因此,我的betAmount 变量中存储的值不正确。我想知道在滑块完成捕捉到最近的刻度后是否有任何方法可以获取滑块的值。

【问题讨论】:

    标签: java javafx slider


    【解决方案1】:

    尝试使用valueProperty() 代替valueChangingProperty()

    betSlider.valueProperty().addListener((obs, oldValue, newValue) -> {
           betAmount = newValue.intValue());
    });
    

    valueChanging -> 它提供值变化的通知。

    value -> 此 Slider 表示的当前值。

    【讨论】:

    • 有没有办法让它在每次移动值时都不会被调用,而只有在它停止移动时才被调用?
    • @camelsaucerer 请问你的代码现在是什么样子的?
    【解决方案2】:

    我过去这样做的方法是使用滑块的 valueProperty() 并过滤掉滑块仍在变化时出现的任何新值。

    int betAmount = 0;
    Slider betSlider = new Slider();
    betSlider.setMinorTickCount(4);
    betSlider.setMajorTickUnit(250);
    betSlider.setSnapToTicks(true);
    
    betSlider.valueProperty().addListener((obs, oldValue, newValue) -> {
        if(newValue != null && !newValue.equals(oldValue) && !betSlider.isValueChanging()) {
            betAmount = newValue.intValue();
            update(); //update method, not relevant to problem
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 2012-06-26
      • 2010-12-01
      相关资源
      最近更新 更多