gpt4 book ai didi

java - 多个 View 中的相同观察列表

转载 作者:行者123 更新时间:2023-11-29 03:53:07 25 4
gpt4 key购买 nike

我有两个使用相同域对象的 View (JPanel)。我的域对象包含一个 ObservableList

ObservableList 是一个链表

private ObservableList<MyObject> listMyObject = ObservableCollections.
observableList(Collections.synchronizedList(new LinkedList<MyObject>()));

在我的两个 View 中,每次将元素添加到列表时我都会做一些计算

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);
}

我遇到的问题是,每次将一个元素添加到列表时,两个 View 都使用相同的列表,位置更新两倍, View 中移动的对象以两倍的速度完成动画。我希望每个添加的元素只更新一次。

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,每个 View 都会迭代列表并更改对象的位置两次而不是一次。感谢您的帮助。

最佳答案

其实,我不明白你的期望:

  • 你有一个主列表 (myListData)
  • 你在主列表上有两个听众
  • 您有该列表 (otherList) 的两个副本,其中包含与主列表相同的实例
  • 收到添加后,两个监听器中的每一个都操作副本中的元素:这些元素是与主实例中的相同实例,因此它们操作了两次..

要解决这个问题,请在 View 外对元素进行一次操作,f.i.通过将听众留在外面:

// frame
getDataList().addListener(....);
new View(getDataList());
// view
... do nothing

关于java - 多个 View 中的相同观察列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7802968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com