设置RangeSlider(ControlsFX)的TickLabel文本,就像JavaFX的Slider的LabelFormatter一样?

时间:2015-02-21 16:18:20

标签: java javafx controlsfx

可以为JavaFX设置一个自己的Slider控件的LabelFormatter,这样就可以自由地定义TickLabel的文本。不幸的是,使用ControlsFX的RangeSlider控件似乎无法做到这一点。

我想知道这是否仍然可能或者如何手动实施?

1 个答案:

答案 0 :(得分:1)

在ControlsFX故障单系统中发布了一种解决方法:https://bitbucket.org/controlsfx/controlsfx/issue/509/add-possibility-to-use-data-other-than

实现该解决方法可能如下所示,确保实现自己的StringConverter:

StringConverter<Number> rangeSliderLabelFormatter; // Implement a regular StringConverter to convert the values as needed.

rangeSlider.skinProperty().addListener(new ChangeListener<Skin<?>>() {
                @Override
                public void changed(ObservableValue<? extends Skin<?>> observable, Skin<?> oldValue, Skin<?> newValue) {
                    if (newValue != null) {
                        if (newValue instanceof RangeSliderSkin) {
                            RangeSliderSkin rangeSliderSkin = (RangeSliderSkin) newValue;
                            if (rangeSliderSkin.getChildren().get(0) instanceof NumberAxis) {
                                NumberAxis containedNumberAxis = (NumberAxis) rangeSliderSkin.getChildren().get(0);
                                containedNumberAxis.setTickLabelFormatter(rangeSliderLabelFormatter);
                            }
                        }
                    }
                }
            });