gpt4 book ai didi

java - 如何在javafx中获取Path中心的坐标?

转载 作者:行者123 更新时间:2023-12-01 12:20:48 29 4
gpt4 key购买 nike

我有 Path 元素,它是手动绘制并保存为 Node 的。我无法弄清楚如何获取整个节点的中心坐标,因此如果使用 relocate() 方法重新定位我的 Path 并稍后决定将其放回原来的位置,它会不返回到其初始位置。我尝试过使用 getLayoutX() 和 getLayoutY() 方法,但它会将我的节点从原始位置进一步向上移动。

我用于重新定位的代码

class PathEventHandler implements EventHandler<MouseEvent>{
//element number in paths
public int n;
public PathEventHandler(int n){
this.n=n;
}
@Override
public void handle(MouseEvent me) {
if (me.getEventType() == MouseEvent.MOUSE_ENTERED) {
paths.get(n).setEffect(new DropShadow(20, Color.BLACK));
}
if (me.getEventType() == MouseEvent.MOUSE_EXITED) {
paths.get(n).setEffect(null);
}
if (i == 2) {
if (me.getEventType() == MouseEvent.MOUSE_DRAGGED) {
listX.add(paths.get(n).getLayoutX());
listY.add(paths.get(n).getLayoutY());
paths.get(n).relocate(me.getSceneX(), me.getSceneY());
cachePath.add(paths.get(n));
cacheType.add("Relocate");
}
if (me.getEventType() == MouseEvent.MOUSE_CLICKED) {
if (me.getButton() == MouseButton.SECONDARY) {
root.getChildren().remove(paths.get(n));
cachePath.add(paths.get(n));
cacheType.add("Remove");
}
}
}
}

}

最佳答案

基于您之前的question ,以及您在本文中几乎没有描述的内容,我试图弄清楚您想要实现的目标。

也许离那里还很远,但是这段简短但实用的代码应该足以让您理解如何处理路径创建(对于第一个问题)和路径移动(对于实际问题),所有这些都在同一个鼠标中听众。

private Path path;
private double x1, y1;

@Override
public void start(Stage primaryStage) {

AnchorPane root = new AnchorPane();

root.addEventHandler(MouseEvent.ANY, e -> {
if(e.getTarget() instanceof Path){
// Select existing path
Path path1 = (Path)e.getTarget();

if (e.getEventType() == MouseEvent.MOUSE_ENTERED_TARGET) {
path1.setEffect(new DropShadow(20, Color.BLACK));
} else if (e.getEventType() == MouseEvent.MOUSE_EXITED_TARGET) {
path1.setEffect(null);
} else if (e.getEventType() == MouseEvent.MOUSE_PRESSED) {
x1=e.getX();
y1=e.getY();
} else if (e.getEventType() == MouseEvent.MOUSE_DRAGGED) {
// traslate path
path1.setTranslateX(e.getX()-x1+path1.getTranslateX());
path1.setTranslateY(e.getY()-y1+path1.getTranslateY());
x1=e.getX();
y1=e.getY();
} else if (e.getButton()==MouseButton.SECONDARY) {
// right-click over the path to move it to its original position
path1.setTranslateX(0);
path1.setTranslateY(0);
}
} else {
// Generate new path
if (e.getEventType() == MouseEvent.MOUSE_PRESSED) {
path = new Path();
path.setStroke(Color.BLACK);
path.setStrokeWidth(10);
path.getElements().add(new MoveTo(e.getX(), e.getY()));
root.getChildren().add(path);
} else if (e.getEventType() == MouseEvent.MOUSE_DRAGGED ||
e.getEventType() == MouseEvent.MOUSE_RELEASED) {
path.getElements().add(new LineTo(e.getX(), e.getY()));
}
}
});

Scene scene = new Scene(root, 600, 400);

primaryStage.setScene(scene);
primaryStage.show();
}

关于java - 如何在javafx中获取Path中心的坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26662763/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com