我有一个滑块,我需要它来修复int数字1-23。因此,如果用户将其从1移动,则它们将以1-23的任何数字结束,这与双值不同。此滑块的目的是作为时钟,拖动它并显示不同的时间。
我的第一次尝试:
private final int MIN_CHANGE = 1;
....
timeSlider.setMax(23);
....
timeSlider.valueProperty().addListener((obs, oldValue, newValue) -> {
if (!timeSlider.isValueChanging()) {
if (Math.abs(newValue.intValue()) > MIN_CHANGE) {
timeSlider.setValue(newValue.intValue());
}
}
});
这或多或少有效,但仅适用于点击,而不适用于拖动。
如果getValue为double,我怎么能在拖动时获得一个滑块来修复像1-23这样的整数?
我面临的另一个问题是拖动pm / am更改并非突然。
timeSlider.valueChangingProperty().addListener((obs, wasChanging, isChanging) -> {
if (isChanging) {
if(timeSlider.getValue() < 12.99) {
labelTest.textProperty().bind(Bindings.format("%.0f:00am", timeSlider.valueProperty()));
} else {
labelTest.textProperty().bind(Bindings.format("%.0f:00pm", timeSlider.valueProperty()));
}
}
});
答案 0 :(得分:0)
将设置snapToTicks
设置为true,将主要刻度线间距设置为23:
timeSlider.setSnapToTicks(true);
timeSlider.setMajorTickUnit(23.0);
timeSlider.setBlockIncrement(23.0);
timeSlider.setMinorTickCount(0.0); // Disable minor ticks
答案 1 :(得分:0)
为了使它与数字对齐,我使用了FXML场景构建器中提供的blockIncrement,majorTickUnit和snapToTicks,直到现在我都没有注意到,感谢ItachiUchiha。
作为参考,我使用了以下设置
min="1.0"
max="23.0"
blockIncrement="1.0"
majorTickUnit="1.0"
minorTickCount="0"
showTickMarks="true"
snapToTicks="true"
最后,要解决我的问题,上午/下午没有更新,我将am / pm绑定的方法更改为以下
timeSlider.valueProperty().addListener((obs, oldValue, newValue) -> {
if (timeSlider.isValueChanging()) {
if (newValue.intValue() < 12) {
labelTest.textProperty().bind(Bindings.format("%.0f:00am", timeSlider.valueProperty()));
} else {
labelTest.textProperty().bind(Bindings.format("%.0f:00pm", timeSlider.valueProperty()));
}
}
});