Javafx滑块在轨迹单击时增加10

Javafx滑块在轨迹单击时增加10,java,javafx,slider,Java,Javafx,Slider,就像javafx中的JSlider一样,我们如何用特定的值递增,就像我希望我的滑块旋钮在滑块上每次右键单击时移动+10(轨迹上的任意位置),在滑块左键单击时移动-10(轨迹上的任意位置)。我正在使用下面的代码,但没有得到结果 Slider betSlider = new Slider(0, 1000, 100); betSlider.setMinorTickCount(0); betSlider.setMajorTickUnit(10); betSlider.setBlockIncrement(

就像javafx中的JSlider一样,我们如何用特定的值递增,就像我希望我的滑块旋钮在滑块上每次右键单击时移动+10(轨迹上的任意位置),在滑块左键单击时移动-10(轨迹上的任意位置)。我正在使用下面的代码,但没有得到结果

Slider betSlider = new Slider(0, 1000, 100);
betSlider.setMinorTickCount(0);
betSlider.setMajorTickUnit(10);
betSlider.setBlockIncrement(10);
betSlider.setSnapToTicks(true);

container.getChildren().add(betSlider);
betSlider.valueProperty().addListener(new ChangeListener<Number>() {
    public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) {
        betSlider.setValue(new_val.intValue());
    }
});
滑块betSlider=新滑块(0、1000、100);
betSlider.setMinorTickCount(0);
贝斯里德尔.塞特马杰蒂克单位(10);
贝斯里德尔:增量(10);
betSlider.setSnapToTicks(真);
container.getChildren().add(betSlider);
betSlider.valueProperty().addListener(新的ChangeListener()){

public void changed(observeValue此问题的主要困难在于我们无法直接访问mouseClick logic()上的轨迹。 这可以通过使用自定义的
SliderSkin
SliderBehavior
创建自定义滑块来解决,但这听起来像是一种过激行为

它不能像代码片段中那样工作,因为当您单击轨迹时,此操作背后的逻辑是将旋钮放置到最近的刻度(再次查看)

要解决这个问题,可以使用以下方法(注意,Java 8):


每次调用
betSlider.setValue
方法时-
betSlider.valueProperty().changed
方法也会被触发。并且只有在没有更多更改时才会触发
setOnMouseClicked
。因此,我们可以简单地跟踪在单击某个轨迹后该值是否已经更改,如果没有,则手动更改它。

可能上面是我的代码,不确定它为什么不起作用
private boolean valueChanged;
....
public void setupSlider() {
    Slider betSlider = new Slider(0, 100, 10);
    int blockIncrementStep = 10;
    betSlider.setMinorTickCount(0);
    betSlider.setMajorTickUnit(10);
    betSlider.setBlockIncrement(blockIncrementStep);
    betSlider.setSnapToTicks(true);
    betSlider.setShowTickMarks(true);
    container.getChildren().add(betSlider);
    betSlider.valueProperty().addListener((ov, oldValue, newValue) -> {
        if (!valueChanged) {
            valueChanged = true;
            if (newValue.intValue() > oldValue.intValue()) {
                betSlider.setValue(oldValue.intValue() + blockIncrementStep);
            } else {
                betSlider.setValue(oldValue.intValue() - blockIncrementStep);
            }
        }
    });
    betSlider.setOnMouseClicked(event -> valueChanged = false);
}