java - 在 JavaFX 中将形状绑定在一起
问题描述
我正在尝试将一些形状绑定在一起,所以当我拖动圆圈时,线条也会跟随它。当我拖动它时,圆圈会移动,但线不会跟随。我正在尝试使用 .bind 但它似乎没有做任何事情。以下是一些相关的方法。
private Line connect(Line line, Circle startNode, Circle endNode) {
line.startXProperty().bind(startNode.centerXProperty());
line.startYProperty().bind(startNode.centerYProperty());
line.endXProperty().bind(endNode.centerXProperty());
line.endYProperty().bind(endNode.centerYProperty());
return line;
}
private void pointsToShapes() {
connect(leftArm, neckNode, leftHandNode);
leftHandNode.setCenterX(leftHand.x);
leftHandNode.setCenterY(leftHand.y);
neckNode.setCenterX(shoulder.x);
neckNode.setCenterY(shoulder.y);
}
leftHandNode.setOnMousePressed(mp);
leftHandNode.setOnMouseDragged(md);
//mouse pressed
EventHandler<MouseEvent> mp = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
System.out.println("pressed");
sceneX = t.getSceneX();
sceneY = t.getSceneY();
translateX = ((Circle)(t.getSource())).getTranslateX();
translateY = ((Circle)(t.getSource())).getTranslateY();
}
};
//mouse dragged
EventHandler<MouseEvent> md = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
System.out.println("dragged");
double offsetX = t.getSceneX() - sceneX;
double offsetY = t.getSceneY() - sceneY;
double newTranslateX = translateX + offsetX;
double newTranslateY = translateY + offsetY;
((Circle)(t.getSource())).setTranslateX(newTranslateX);
((Circle)(t.getSource())).setTranslateY(newTranslateY);
}
};
解决方案
正如@fabian 提到的,您需要在绑定到线属性时考虑翻译属性。
private Line connect(Line line, Circle startNode, Circle endNode) {
line.startXProperty().bind(startNode.centerXProperty().add(startNode.translateXProperty()));
line.startYProperty().bind(startNode.centerYProperty().add(startNode.translateYProperty()));
line.endXProperty().bind(endNode.centerXProperty().add(endNode.translateXProperty()));
line.endYProperty().bind(endNode.centerYProperty().add(endNode.translateYProperty()));
return line;
}
推荐阅读
- scripting - 无法绕过错误 619“找不到控件”
- mysql - MySQL 选择使用替换与 concat
- javascript - Turning Array Data Into Percent Values
- android - RecyclerView - 一个项目的一些变量是空的 - 根本不显示项目
- c++ - 模板中的类型转换
- php - WooCommerce 在订单元中自定义产品名称
- python - python中的Apache Beam:如何在另一个PCollection上重用完全相同的变换
- java - 使用流从现有列表创建不可变列表
- java - 既然我收到了已弃用的警告,我应该使用 JAXB 吗?
- reactjs - 预期的赋值或函数调用:no-unused-expressions ReactJS