如何使JavaFX滑块以离散的步骤移动?

如何使JavaFX滑块以离散的步骤移动?,java,javafx,integer,slider,javafx-8,Java,Javafx,Integer,Slider,Javafx 8,我正在使用JavaFx制作一个GUI,我需要只允许选择整数的滑块 我知道我可以使用snapToTicks,但在拉动旋钮的同时,它仍然可以表示非整数值。我想摆脱它。它会弄乱链接到它的其他组件 基本上,我想要类似于Swing的JSlider的东西,但是要使用JavaFx。可能吗?我一直在搜索,但找不到任何内容。您只需将一个侦听器添加到滑块的中,然后您可以设置新的编号的值: slider.valueProperty().addListener((obs, oldval, newVal) ->

我正在使用
JavaFx
制作一个
GUI
,我需要只允许选择
整数的滑块

我知道我可以使用
snapToTicks
,但在拉动
旋钮
的同时,它仍然可以表示
非整数值。我想摆脱它。它会弄乱链接到它的其他组件


基本上,我想要类似于Swing的JSlider的东西,但是要使用
JavaFx
。可能吗?我一直在搜索,但找不到任何内容。

您只需将一个侦听器添加到
滑块的中,然后您可以设置新的
编号的值:

slider.valueProperty().addListener((obs, oldval, newVal) -> 
    slider.setValue(newVal.intValue()));
或者,您也可以使用整数舍入,使用:

在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" 
        />
这里的关键是“捕捉到刻度”选项与刻度单位的正确组合相结合。 此设置会产生以下滑块,该滑块只能用于选择范围为1到4的值:


这是个不错的主意,我只是不喜欢向下取整(原因请参见我对天行者的评论)。不过我仍然可以使用它。你也可以使用整数舍入,比如
((int)Math.round(newVal.doubleValue())
。这两种方法都不允许在整数值之间有“旋钮”。这听起来更好,不过我还是想知道是否有更合法的方法。当我们需要赞扬MVC时,JavaFX在哪里?来自Swing,这真是一个丑陋的解决方案。嗯。。。在侦听器中更改属性时总是感觉脏兮兮的(即使我们在fx中似乎比在良好的ol'swing中更容易得逞)。而且我猜(没有尝试)用户体验是一种有点意外的感觉,这是永远不会发生的。是否(OP)在从属控件中尝试了条件绑定,仅当滑块的adjustingProperty为false时才获取该值?
<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" 
        />
Slider slider = new Slider(1, 4, 1);
slider.setBlockIncrement(1);
slider.setMajorTickUnit(1);
slider.setMinorTickCount(0);
slider.setShowTickLabels(true);
slider.setSnapToTicks(true);