Binding 如何绑定两个不同的JavaFx属性:String和Double(使用StringConverter)?
对于这段代码(JavaFX) 我试图避免使用原始类型的泛型,这样就不必在IDE中抑制警告 所以问题是: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属性中的一个小“陷阱”。如果仔细查看签名:
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));
}
});
});