设置RangeSlider(ControlsFX)的TickLabels的文本,就像JavaFX的Slider的LabelFormatter?
Setting text of TickLabels of RangeSlider (ControlsFX), like the LabelFormatter of JavaFX's Slider?
可以为JavaFX 自己的Slider 控件设置一个LabelFormatter,这样可以自由定义TickLabel 的文本。不幸的是,ControlsFX 的 RangeSlider 控件似乎无法做到这一点。
我想知道这是否仍然可能以某种方式或如何手动实施?
已在 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);
}
}
}
}
});
可以为JavaFX 自己的Slider 控件设置一个LabelFormatter,这样可以自由定义TickLabel 的文本。不幸的是,ControlsFX 的 RangeSlider 控件似乎无法做到这一点。
我想知道这是否仍然可能以某种方式或如何手动实施?
已在 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);
}
}
}
}
});