我使用的是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);
}
}
这里是observableList的基本初始化
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");
}
});
}
}