【发布时间】:2015-01-20 16:50:07
【问题描述】:
我正在开发一个需要在窗格上移动节点的应用程序。
我最近刚开始学习 javaFx 8,所以我对工作流程几乎没有了解,但是当我设法让可拖动的节点代码正常工作时,它使用 node.setTranslateX() 和 .setTranslateY()。
这一切都很好,直到我尝试让节点捕捉到一个网格,该网格将场景区域分为 10 个高度和宽度细分。
每当我尝试使用模数来进行某种捕捉时,我都会坚持我称之为平移转换的事实。我想自己直接设置节点的坐标。我试过 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) 里?