У меня есть два представления (JPanel), которые используют один и тот же объект домена.Мой доменный объект содержит ObservableList
.
ObservableList представляет собой LinkedList
private ObservableList<MyObject> listMyObject = ObservableCollections.
observableList(Collections.synchronizedList(new LinkedList<MyObject>()));
В двух моих представлениях я выполняю некоторые вычисления каждый раз, когда элемент добавляется в список
protected class MyListDataListener implements ObservableListListener {
public void listElementsAdded(ObservableList list, int index, int length) {
MyObject obj = (MyObject)list.get(index);
Poin2D location = obj.getObjLocation();
location.setLocation(location.x + (time / getWidth()), location.y);
obj.setObjLocation(location);
}
Проблема IДело в том, что, поскольку оба представления используют один и тот же список каждый раз, когда в список добавляется один элемент, местоположение обновляется два раза, а объект, который движется в представлении, завершает свою анимацию в два раза быстрее.Я бы хотел, чтобы он обновлялся только один раз для каждого добавленного элемента.
public class MyFrame extends JFrame {
public MyFrame() {
View view1 = new View(domainObject.getMyDataList());
View view2 = new View(domainObject.getMyDataList());
}
}
public class View extends JPanel {
private ObservableList<MyObject> listMyObject;
private ObservableList<MyObject> otherList = ObservableCollections.
observableList(Collections.synchronizedList(new LinkedList<MyObject>()));
public View(ObservableList<MyObject> listMyObject) {
this.listMyObject = listMyObject;
listMyObject.addListListener(new MyListDataListener());
}
protected class MyListDataListener implements ObservableListListener {
public void listElementsAdded(ObservableList list, int index, int length) {
otherList.add((MyObject)list.get(index));
for(MyObject obj : otherList) {
Poin2D location = obj.getObjLocation();
location.setLocation(location.x + (time / getWidth()), location.y);
obj.setObjLocation(location);
}
}
Если я не создаю view2, все работает нормально.Когда view2 создается каждый раз, когда добавляется элемент, каждое представление повторяет список и изменяет местоположение моего объекта два раза вместо одного.Спасибо за помощь.