Я хочу написать код, который похож на привязку JavaFX. У меня есть цифры f и с помощью getBounds (). GetLocation () я получил середину рисунка. Сначала я просто хочу смоделировать простые перемещения. Если я перемещу исходную фигуру вокруг вектора 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);
Теперь я должен разорвать эти циклические зависимости. Я думаю, что лучший способ - проверить, поступает ли команда move с «консоли» (мышь, клавиатура). В противном случае фигуры не должны двигаться: в случае, если я двигаюсь f1, также должна двигаться только f2 (f3 не должно быть задействовано). У кого-нибудь есть идеи, как мне это решить?