0
作成したノードをドラッグ可能にしようとしています。JavaFX:ドラッグ可能なノードの作成に問題がある
私はペインで好きなところにノードを置くことができますが、ドラッグするとノードを自動的にオフパスするように見えます。
私はノード上でマウスを押している間にそれに応じて更新されるxとyを含むDeltaクラスを作ろうとしました。
nfaPane.setOnMousePressed(event -> {
if (!event.getButton().equals(MouseButton.PRIMARY)) return;
for (final NFANode node : nfaNodes)
if (node.isHover())
return;
final NFANode nfaNode = new NFANode(nfaNodes.size(), event.getX(), event.getY());
nfaPane.getChildren().add(nfaNode);
nfaNodes.add(nfaNode);
Delta dragDelta = new Delta();
nfaNode.setOnMousePressed(event1 -> {
dragDelta.setDragDeltaX(nfaNode.getLayoutX());
dragDelta.setDragDeltaY(nfaNode.getLayoutY());
});
nfaNode.setOnMouseDragged(event1 -> {
nfaNode.moveTo(event1.getSceneX() + dragDelta.getDragDeltaX(), event1.getSceneY() + dragDelta.getDragDeltaY());
});
});
ノード自体は、クラスNFANodeによって定義されます。
package sample;
import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
/**
* Created by David on 11/5/2016.
*/
public class NFANode extends Group {
//private List<NFANode> next;
public static final Font nfaFont = Font.font("Footlight MT Light", 25);
private final Ellipse bubble;
private final Text text;
private double textWidth;
public NFANode(int value, double x, double y) {
this.text = new Text(x, y + 5, "");
renumber(value);
this.text.setFont(nfaFont);
textWidth = this.text.getBoundsInLocal().getWidth();
bubble = new Ellipse(x, y, this.text.getBoundsInLocal().getWidth() + 5, 25);
this.text.setX(x - textWidth/2);
bubble.setStroke(Color.BLACK);
bubble.setFill(Color.WHITE);
getChildren().addAll(bubble, this.text);
}
public Text getText() {
return text;
}
public void renumber(final int value) {
final StringBuilder builder = new StringBuilder();
for (char c : String.valueOf(value).toCharArray()) builder.append((char) (c + 8272));
text.setText("Q" + builder.toString());
}
public void moveTo(final double x, final double y) {
bubble.setCenterX(x);
bubble.setCenterY(y);
text.setX(x - textWidth/2);
text.setY(y + 5);
}
}
私はドラッグするとき、これはノードの位置に影響を与える理由として困惑していますか?