我想要下面的滑块,其中用户只能选择预定义的一组值(64、128、256,... 2048),并且我还希望能够为此刻度设置标签。像这样:


[--*---------*------------------O--------------]
   64       128                256


是否有用于此类非连续滑块的内置解决方案或组件?

最佳答案

这是针对JavaFX-8的(由于问题,它不适用于JFX-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();
}


但是根据问题:https://javafx-jira.kenai.com/browse/RT-18448该解决方案在8.0版本发布之前无法应用。

问题在于,似乎无法通过对left属性的操作来解决问题。因为所有剩余的属性都可以通过线性值更改来操纵滑块。通过LabelFormatter可以实现对数值的更改,这是一个技巧。

关于自定义还有一个功能:https://javafx-jira.kenai.com/browse/RT-27863

关于java - 非连续滑块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16347323/

10-15 10:59