私は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);
}
});
}
}
}
});
}
各ノードの中心を取得するために、1回目と2回目のクリックをチェックするブール値があります。私の最初の質問は、ライン関数をクリックして2つのノードの間にラインを追加すると、関数が終了していないように見え、クリックした他のノードがラインを取得することです。どうすれば複数回実行されないようにすることができますか。
そして私の2番目の質問は、ノードが移動した場合にラインがノードの中央に留まるように、ラインをノードに「接続」するにはどうすればよいですか?
ありがとう。