Java 非连续滑块

Java 非连续滑块,java,javafx-2,javafx-8,Java,Javafx 2,Javafx 8,我想有下面的滑块,用户可以选择只有预定义的值集(64,128,256,…2048),我还想能够设置标签,为这个节拍。大概是这样的: [--*---------*------------------O--------------] 64 128 256 这种非连续滑块是否有内置的解决方案或组件?这里是针对JavaFX-8的(由于问题,它不适用于JFX-2,请看下面的评论): @覆盖 public void start(Stage)引发异常{ 滑块

我想有下面的滑块,用户可以选择只有预定义的值集(64,128,256,…2048),我还想能够设置标签,为这个节拍。大概是这样的:


[--*---------*------------------O--------------]
   64       128                256
这种非连续滑块是否有内置的解决方案或组件?

这里是针对JavaFX-8的(由于问题,它不适用于JFX-2,请看下面的评论):

@覆盖
public void start(Stage)引发异常{
滑块s=新滑块();
s、 setLabelFormatter(新的StringConverter(){
@凌驾
公共字符串到字符串(双t){
返回字符串.valueOf(Math.round(Math.pow(2,t));
}
@凌驾
public Double fromString(字符串字符串){
返回Double.parseDouble(字符串);
}
});
s、 setMin(0);
s、 setMax(10);
s、 setMajorTickUnit(1);
s、 setMinorTickCount(0);
s、 setSnapToTicks(真);
s、 设置显示标签(真);
s、 设置显示记号(真);
舞台(新场景);;
stage.show();
}
但根据问题:在8.0版本构建之前,解决方案无法应用

问题在于,似乎无法通过对左侧属性进行操作来解决此问题。因为所有左侧属性都可以在线性值更改的情况下操纵滑块。对数值的改变是通过LabelFormatter实现的,这是一个技巧


还有一个定制功能:

这看起来就像你只是用2的幂来标记刻度…@Randy你完全正确:)那么正常的摆动控制工作吗?@Randy是否可以将摆动组件集成到javafx2应用程序中?哦,谢谢!看起来正是我需要的。但不幸的是,它显示的标签是1、2、3、4,而不是2、4、8、16。这意味着,您使用非常旧的构建。使用哪个版本的JFX?好吧,它是在2012年12月修复的:,所以它只在8.0版本中修复。噢,我的天哪
com.sun.javafx.runtime.VersionInfo.getRuntimeVersion()
2.2.21-b11。我现在要更新jfx:)“修复版本/s:Lombard”,这意味着修复在2.2.*+版本中不可用。而且,正如我在回答中所说的,似乎不应用标签格式化程序就无法生成对数滑块
@Override
public void start(Stage stage) throws Exception {
    Slider s = new Slider();
    s.setLabelFormatter(new StringConverter<Double>() {
        @Override
        public String toString(Double t) {
            return String.valueOf(Math.round(Math.pow(2, t)));
        }

        @Override
        public Double fromString(String string) {
            return Double.parseDouble(string);
        }
    });

    s.setMin(0);
    s.setMax(10);
    s.setMajorTickUnit(1);
    s.setMinorTickCount(0);
    s.setSnapToTicks(true);
    s.setShowTickLabels(true);
    s.setShowTickMarks(true);

    stage.setScene(new Scene(s));
    stage.show();
}