gpt4 book ai didi

Javafx slider 增量为 10 轨道单击

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:15 24 4
gpt4 key购买 nike

就像javafx中的JSlider一样,我们如何以特定值递增,就像我希望我的 slider 旋钮每次右键单击 slider (轨道上的任何位置)时应移动+10,左键单击 slider (轨道上的任何位置)时移动-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());
}
});

最佳答案

这个问题的主要困难是我们无法直接访问轨道 OnMouseClick 逻辑 ( SliderBehavior.trackPress )。这可以通过使用自定义 SliderSkinSliderBehavior 创建自定义 slider 来解决,但这听起来有点矫枉过正。

它在代码片段中无法按原样工作,因为当您单击轨道时,此操作背后的逻辑是将旋钮放置到最近的刻度处(再次查看 SliderBehavior.trackPress )

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

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

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

关于Javafx slider 增量为 10 轨道单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50209540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com