我正忙于使用 JavaFX2 编写一个简单的应用程序。目标只是绘制 2 个节点(节点可以通过拖动来移动),然后具有在这些节点之间画线的功能。我完成了添加和移动节点的功能(目前我只是使用椭圆形状,但稍后我将用我自己的节点类替换它)但现在我正在努力处理连接线。添加节点或线条的操作来自下拉菜单,我在线条功能上有以下代码:
private void drawLine(MenuItem line) {
final BooleanProperty lineActive = new SimpleBooleanProperty(false);
final BooleanProperty clickOne = new SimpleBooleanProperty(false);
final BooleanProperty clickTwo = new SimpleBooleanProperty(false);
line.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent t) {
lineActive.set(true);
}
});
nodeGroup.setOnMousePressed(new EventHandler<MouseEvent>() {
public void handle(final MouseEvent t1) {
clickOne.set(true);
if (lineActive.get()) {
if (clickOne.get()) {
//get x and y of first node
x1 = ((Ellipse) t1.getTarget()).getCenterX();
y1 = ((Ellipse) t1.getTarget()).getCenterY();
clickOne.set(false);
clickTwo.set(true);
}
if (clickTwo.get()) {
nodeGroup.setOnMouseClicked(new EventHandler<MouseEvent>() {
public void handle(MouseEvent t2) {
//get x and y of second node
x2 = ((Ellipse) t2.getTarget()).getCenterX();
y2 = ((Ellipse) t2.getTarget()).getCenterY();
//draw line between nodes
final Line line = new Line();
line.setStartX(x1);
line.setStartY(y1);
line.setEndX(x2);
line.setEndY(y2);
canvas.getChildren().add(line);
clickTwo.set(false);
lineActive.set(false);
}
});
}
}
}
});
}
我只有布尔值来检查第一次和第二次单击以获取每个节点的中心。我的第一个问题是,当我单击线功能并在 2 个节点之间添加一条线时,它似乎并没有结束该功能,并且我单击的任何其他节点都会得到一条线。我怎样才能防止它多次执行。
我的第二个问题是如何将线“连接”到节点,如果节点移动,线会停留在节点的中心?
谢谢。