Как заставить JavaFX Slider двигаться в дискретных шагах?

Я JavaFx GUI с использованием JavaFx и мне нужны ползунки, которые позволяют выбирать только integers.

Я знаю, что могу использовать snapToTicks, но, потянув за "knob", он все равно может представлять non-integer значение. Я хотел бы избавиться от этого. Это испортит другие компоненты, связанные с ним.

В принципе, я хочу что-то вроде Swing JSlider, но с JavaFx. Является ли это возможным? Я искал, но ничего не могу найти.

Ответ 1

Вы можете просто добавить слушателя к valueProperty Slider а затем вы можете либо установить целочисленное значение нового значения Number:

slider.valueProperty().addListener((obs, oldval, newVal) -> 
    slider.setValue(newVal.intValue()));

или, альтернативно, вы можете использовать целочисленное округление, используя Math.round:

slider.valueProperty().addListener((obs, oldval, newVal) ->
    slider.setValue(Math.round(newVal.doubleValue())));

Ответ 2

<Slider fx:id="availableReproSelector" 
        blockIncrement="1.0" 
        cache="true" 
        majorTickUnit="1.0" 
        max="4.0" 
        min="1.0" 
        minorTickCount="0" 
        showTickLabels="true" 
        showTickMarks="true" 
        snapToTicks="true" 
        value="1.0" 
        />

Ключ здесь - опция привязки к тикам в сочетании с соответствующей комбинацией единиц тика. Эта настройка приводит к следующему слайдеру, который может использоваться только для выбора значений в диапазоне от 1 до 4:

can only select int values ranging from 1 to 4