How to make JavaFX Slider to move in discrete steps?

前端 未结 2 1850
旧时难觅i
旧时难觅i 2021-01-04 03:18

I am making a GUI using JavaFx and I need sliders that only allow integers to ever be selected.

I know I can use snapToT

相关标签:
2条回答
  • 2021-01-04 03:56

    You can simply add a listener to the valueProperty of the Slider and then you can either set the integer value of the new Number value:

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

    or alternatively you can use integer rounding using Math.round:

    slider.valueProperty().addListener((obs, oldval, newVal) ->
        slider.setValue(Math.round(newVal.doubleValue())));
    
    0 讨论(0)
  • 2021-01-04 04:06

    In FXML:

    <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" 
            />
    

    Or in Java:

    Slider slider = new Slider(1, 4, 1);
    slider.setBlockIncrement(1);
    slider.setMajorTickUnit(1);
    slider.setMinorTickCount(0);
    slider.setShowTickLabels(true);
    slider.setSnapToTicks(true);
    

    The key here is the snap to ticks option combined with a proper combination of tick units. This setting results in the following slider which can only be used to select values ranging from 1 to 4 :

    0 讨论(0)
提交回复
热议问题