Javafx Slider事件侦听器在捕捉到最近的tick之前被调用

时间:2015-04-14 21:26:16

标签: java javafx slider

我每次更改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变量中存储的值不正确。我想知道在完成捕捉到最近的刻度之后是否有任何方法可以获得滑块的值。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

我过去做过的方法是使用滑块的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
    }
});