我正在研究需要在窗格上移动节点的应用程序。移动JavaFx8节点的正确方法
我刚刚开始学习javaFx 8,所以我对工作流有了一些了解,但是当我设法使可工作的可拖动节点代码工作时,它使用了node.setTranslateX()和.setTranslateY()。
这一切都很好,直到我试图使节点捕捉到一个网格,该网格将高度和宽度细分中的场景区域分开。
每当我尝试使用modulos来获取某种捕捉进行时,我被卡住的事实是我打电话翻译转换。我想自己直接设置节点的坐标。我试过node.relocate(x,y)无济于事。至于node.setX()或node.setY()。这些似乎没有太大的作用。
所以基本上,我有两个问题:
- 有直接设置一个节点的坐标的方法吗?如果是,如何?
- 将节点捕捉到网格并用鼠标拖动时正确的方法是什么?
我当前的代码使用这些方法来拖动节点:
public class Boat extends ImageView {
private int size ;
private String name ;
private Double dragDeltaX, dragDeltaY;
//Constructor etc here//
this.setOnMousePressed(event -> {
this.setCursor(Cursor.CLOSED_HAND);
dragDeltaX = this.getLayoutX() + event.getX();
dragDeltaY = this.getLayoutY() + event.getY();
});
this.setOnMouseReleased(event -> {
this.setCursor(Cursor.OPEN_HAND);
this.relocate(event.getSceneX(), event.getSceneY());
});
this.setOnMouseDragged(event -> {
this.setTranslateX(event.getSceneX() - dragDeltaX);
this.setTranslateY(event.getSceneY() - dragDeltaY);
});
this.setOnMouseEntered(event -> {
this.setCursor(Cursor.OPEN_HAND);
});
}
在此先感谢您的帮助,
什么样的容器('Pane')你把它放进去? – 2014-11-22 17:11:50
@James_D Stackpane – Skwiggs 2014-11-22 21:01:51