簡體   English   中英

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
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM