如何让JavaFX Slider以不连续的步骤移动?

时间:2016-07-31 07:13:24

标签: java javafx integer slider javafx-8

我使用GUI制作JavaFx,我需要只允许选择integers的滑块。

我知道我可以使用snapToTicks,但在提取"knob"时,它仍然可以代表non-integer值。我想摆脱它。它弄乱了与之相关的其他组件。

基本上,我需要Swing's JSlider之类的东西,但需要JavaFx。可能吗?我一直在搜索,但找不到任何东西。

2 个答案:

答案 0 :(得分:13)

您只需向Slider的{​​{3}}添加一个监听器,然后就可以设置新Number值的valueProperty

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

或者您可以使用integer value使用整数舍入:

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

答案 1 :(得分:2)

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

或使用Java:

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

此处的关键是“按时滴答”选项与适当的滴答单位组合。 此设置将导致以下滑块只能用于选择1到4范围内的值:

can only select int values ranging from 1 to 4