Binding 如何绑定两个不同的JavaFx属性:String和Double(使用StringConverter)?

Binding 如何绑定两个不同的JavaFx属性:String和Double(使用StringConverter)?,binding,properties,javafx,Binding,Properties,Javafx,对于这段代码(JavaFX) 我试图避免使用原始类型的泛型,这样就不必在IDE中抑制警告 所以问题是: 编写这段代码的正确模式是什么 这可能是JavaFX属性中的一个小“陷阱”。如果仔细查看签名: static <T> void bindBidirectional(Property<java.lang.String> stringProperty, Property<T> otherProperty, StringConverter<T>

对于这段代码(JavaFX)

我试图避免使用原始类型的泛型,这样就不必在IDE中抑制警告

所以问题是:
编写这段代码的正确模式是什么

这可能是JavaFX属性中的一个小“陷阱”。如果仔细查看签名:

static <T> void bindBidirectional(Property<java.lang.String> stringProperty,
    Property<T> otherProperty, StringConverter<T> converter)

您还可以获得额外的好处,即可以指定转换格式。

这就是我的解决方案的答案:

    ArrayList<Pair<Slider,Label>> sliderList = new ArrayList<Pair<Slider,Label>>(
            Arrays.asList(
                    new Pair<Slider,Label>(soundSlider, soundLabel),
                    new Pair<Slider,Label>(videoSlider, videoLabel),

    sliderList.forEach(p->{
        Bindings.bindBidirectional(p.getValue().textProperty(), p.getKey().valueProperty(), new NumberStringConverter() {
            @Override
            public String toString(Number value) {
                return super.toString(Math.round((double) value));
            }
        }); 
    });
ArrayList滑块列表=新建ArrayList(
Arrays.asList(
新的一对(soundSlider、soundLabel),
新的一对(videoSlider、videoLabel),
幻灯片列表。forEach(p->{
Bindings.BindingBydirective(p.getValue().textProperty()、p.getKey().valueProperty()、new NumberStringConverter()){
@凌驾
公共字符串到字符串(数值){
返回super.toString(数学舍入((双)值));
}
}); 
});

有没有一种方法可以通过单向绑定实现这一点?有关单向绑定,请参阅
StringConverter converter = new DoubleStringConverter();    
static <T> void bindBidirectional(Property<java.lang.String> stringProperty,
    Property<T> otherProperty, StringConverter<T> converter)
StringProperty sp = ...;
DoubleProperty dp = ...;
StringConverter<Number> converter = new NumberStringConverter();
Bindings.bindBidirectional(sp, dp, converter);
    ArrayList<Pair<Slider,Label>> sliderList = new ArrayList<Pair<Slider,Label>>(
            Arrays.asList(
                    new Pair<Slider,Label>(soundSlider, soundLabel),
                    new Pair<Slider,Label>(videoSlider, videoLabel),

    sliderList.forEach(p->{
        Bindings.bindBidirectional(p.getValue().textProperty(), p.getKey().valueProperty(), new NumberStringConverter() {
            @Override
            public String toString(Number value) {
                return super.toString(Math.round((double) value));
            }
        }); 
    });