JavaFXのノードのいずれかのプロパティ(または特定のグループのいずれかより優れているもの)が変更された場合に通知する方法はありますか?任意のプロパティが変更されたときのJavaFXの通知
ありがとうございます!
JavaFXのノードのいずれかのプロパティ(または特定のグループのいずれかより優れているもの)が変更された場合に通知する方法はありますか?任意のプロパティが変更されたときのJavaFXの通知
ありがとうございます!
実は私も、あなたがこのような何かをしたい理由を知りませんが、あなたはすべてのプロパティのために自分自身を繰り返したくない場合は、あなたがこのような何か行うことができます:
ObservableList<Property<?>> propList = FXCollections.observableArrayList();
private void doSomething(Observable observable){
System.out.println("Handled" + observable.toString());
}
private void attachListener(Property<?> p){
p.addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
doSomething(observable);
}
});
}
// In start, or whereever you want to add the properties
propList.addListener(new ListChangeListener<Property<?>>(){
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Property<?>> change) {
while(change.next()){
if(change.wasAdded())
for(Property<?> item : change.getAddedSubList()){attachListener(item);}
}
}
});
BooleanProperty a = new SimpleBooleanProperty(false);
BooleanProperty b = new SimpleBooleanProperty(false);
IntegerProperty c = new SimpleIntegerProperty(1);
propList.addAll(a,b,c);
a.set(true);
a.set(false);
b.set(true);
c.set(2);
を出力は次のとおりです。
HandledBooleanProperty [value: true]
HandledBooleanProperty [value: false]
HandledBooleanProperty [value: true]
HandledIntegerProperty [value: 2]
それは何:
あなたはObservableList
にプロパティを追加し、リストに新しい要素を取得するときに、あなたのハンドラはとして取り付けられています。したがって、リスナーを1つずつ追加するのではなく、リストに要素を追加してプロパティセットを制御することができます。
あなたはリスナーを添付しますが、決してそれらを切り離すことはできません... – fabian
これらのすべてに同じ無効化リスナーを追加しますか? – Itai
これは目的のプロパティにバインドされたバインディングを作成することを含まないユースケースを見るのは難しいです。実際に何をしようとしていますか? –
@sillyfly ありがとうございました。私は次のようにsillyflyのメソッドを試してみます: property1..addListener((ObservableValue <?extends Object> observable、Object oldValue、Object newValue) - > { // doSomething();}); property2..addListener((ObservableValue <?extends Object> observable、Object oldValue、Object newValue) - > { // doSomething();}); –