お問い合わせの際:
Bindings.bindBidirectional(propertyA, propertyB);
をpropertyA
の値がpropertyB
の値に設定されます。
propertyB
が既にObjectB
を参照するように、この場合には、呼び出しの後、両方のプロパティが参照されます:ObjectB
テストコード
import javafx.beans.binding.Bindings;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
public class HellBound {
public static void main(String[] args) {
ObjectProperty<Object> propertyA = new SimpleObjectProperty<>();
ObjectProperty<Object> propertyB = new SimpleObjectProperty<>();
propertyA.set(new ObjectA());
propertyB.set(new ObjectB());
Bindings.bindBidirectional(propertyA, propertyB);
System.out.println("propertyA = " + propertyA);
System.out.println("propertyB = " + propertyB);
}
private static class ObjectA {
}
private static class ObjectB {
}
}
テスト出力
propertyA = ObjectProperty [value: [email protected]]
propertyB = ObjectProperty [value: [email protected]]
バインディング実装のソース
注コールproperty1.setValue(property2.getValue());
:追加の質問へ
public static <T> BidirectionalBinding bind(Property<T> property1, Property<T> property2) {
checkParameters(property1, property2);
final BidirectionalBinding binding =
((property1 instanceof DoubleProperty) && (property2 instanceof DoubleProperty)) ?
new BidirectionalDoubleBinding((DoubleProperty) property1, (DoubleProperty) property2)
: ((property1 instanceof FloatProperty) && (property2 instanceof FloatProperty)) ?
new BidirectionalFloatBinding((FloatProperty) property1, (FloatProperty) property2)
: ((property1 instanceof IntegerProperty) && (property2 instanceof IntegerProperty)) ?
new BidirectionalIntegerBinding((IntegerProperty) property1, (IntegerProperty) property2)
: ((property1 instanceof LongProperty) && (property2 instanceof LongProperty)) ?
new BidirectionalLongBinding((LongProperty) property1, (LongProperty) property2)
: ((property1 instanceof BooleanProperty) && (property2 instanceof BooleanProperty)) ?
new BidirectionalBooleanBinding((BooleanProperty) property1, (BooleanProperty) property2)
: new TypedGenericBidirectionalBinding<T>(property1, property2);
property1.setValue(property2.getValue());
property1.addListener(binding);
property2.addListener(binding);
return binding;
}
回答
javadocは私たちに便利な、この種のを教えてくれない理由私は思ったんだけど情報。
javadocは、人間ではなく神で書かれているためです。時には、人間は、たまらなく脱落します。おそらく神々もそうです:-)
私はそれがJavadocにあるべきであることに同意します。
doc(http://bugreport.java.com)を改善するためのバグレポートを提出できました。または、openjfx-dev開発者リストに投稿すると、改善のためのコミット権限を持つ開発者が得られる可能性があります。自分でパッチを提出することもできますが、ほとんどの人にとっては、すでにOCAに署名しているJDKコミット者でない限り、おそらくそれは価値がありません。
Bindings.bindContentBidirectional()も同じ方法で動作するようにObservableListsで同じにする必要があると仮定していますか?
うん、そのメソッドのソースは、次のコードを持っています
list1.setAll(list2);
実は、私は右の質問をした後、それを自分自身をテストするためにオフに行き、同じ結論を得ました。 javadocがこの種の有用な情報を私たちに教えてくれないのはなぜかと思っています。また、これは 'ObservableList'sでも同じでなければならないと思います。そのため、' Bindings.bindContentBidirectional() 'も同じように動作するはずです。 – Jai