与观察者模式的绑定导致循环依赖性

时间:2019-01-19 14:49:09

标签: java listener observer-pattern observers javafx-bindings

我想编写类似于JavaFX绑定的代码。我有Figures,并通过“ getBounds()。getLocation()”得到了Figure的中点。首先,我只想模拟简单的位移。如果我将源图形围绕矢量dx移动,则相关图应沿相同方向移动,并且位移应具有相同长度。

public void Bindings.bind(Figure depend, Figure source){
Point p = new Point(source.getBounds().getLocation());
source.addFigureListener(e ->{
       int dx = source.getBounds().getLocation().getX() - p.getX();
       int dy = source.getBounds().getLocation().getY() - p.getY();
       if(dx!=0; dy!=0){
            depend.move(dx,dy);
            p.x = source.getBounds().getLocation().getX();
            p.y = source.getBounds().getLocation().getY();
       }
   });
}

如果我现在绑定三个数字,那么我会得到一个StackOverflow错误:

Bindings.bind(f2,f1);
Bindings.bind(f3,f2);
Bindings.bind(f1,f3);

现在我必须打破这些循环依赖性。我认为最好的方法是检查移动命令是否来自“控制台”(鼠标,键盘)。否则,数字将不会移动:在我移动f1的情况下,f2也应该移动(f3一定不能参与)。有人知道我该如何解决吗?

0 个答案:

没有答案