Javafx Slider 事件侦听器在捕捉到最近的刻度之前被调用
Javafx Slider event listener being called before it snaps to the nearest tick
每次 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
变量中存储的值不正确。我想知道是否有任何方法可以在完成捕捉到最近的刻度后获取滑块的值。
尝试使用 valueProperty()
代替 valueChangingProperty()
betSlider.valueProperty().addListener((obs, oldValue, newValue) -> {
betAmount = newValue.intValue());
});
valueChanging
-> 它提供值正在更改的通知。
value
-> 这个Slider表示的当前值。
我过去这样做的方法是使用滑块的 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
}
});
每次 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
变量中存储的值不正确。我想知道是否有任何方法可以在完成捕捉到最近的刻度后获取滑块的值。
尝试使用 valueProperty()
代替 valueChangingProperty()
betSlider.valueProperty().addListener((obs, oldValue, newValue) -> {
betAmount = newValue.intValue());
});
valueChanging
-> 它提供值正在更改的通知。
value
-> 这个Slider表示的当前值。
我过去这样做的方法是使用滑块的 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
}
});