Я использую observableList, для которого мне нужно реагировать на изменения самих элементов. Это работает нормально, если только один из Elenemnts в одном из наборов данных изменяется. Но, к сожалению, иногда все изменяются одновременно из-за внешней привязки, и я получаю сотни событий одновременно, но на самом деле было бы достаточно (и эффективно), если бы я мог реагировать только на одно из них и игнорировать другие.
Есть ли какой-либо возможный способ связать такие события или обнаружить, принадлежат ли они одному и тому же набору, и игнорировать другие, как только я обработал первое.
Я был бы очень рад, если бы кто-нибудь мог помочь с решением.
Ниже приведен упрощенный код.
Первый класс данных
package fxtester;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
public class Data {
private final DoubleProperty number1 = new SimpleDoubleProperty();
private final DoubleProperty number2 = new SimpleDoubleProperty();
private BooleanProperty event;
public Data(BooleanProperty bp) {
event.bind(bp);
event.addListener((observable) -> {
number1.set(number1.get()+1);
number2.set(number2.get()+1);
});
}
public DoubleProperty number2Property() {
return number2;
}
public double getNumber1() {
return number1.get();
}
public void setNumber1(double value) {
number1.set(value);
}
public DoubleProperty number1Property() {
return number1;
}
public double getNumber2() {
return number2.get();
}
public void setNumber2(double value) {
number2.set(value);
}
}
А вот основная инициализация из наблюдаемого списка
package fxtester;
import javafx.beans.Observable;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
public class Go {
private ObservableList<Data> data =
FXCollections.observableArrayList(param -> new Observable[]{
param.number1Property(), param.number2Property()
});
public Go() {
data.addListener(new ListChangeListener<Data>() {
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Data> c) {
System.out.println("Event");
}
});
}
}