私はペイン(1440x800)とノード(400x300)を持っています。このペインの中を移動する必要があります。だから私はStackPaneを取ったPaneとNodeに対してVBoxを取った。JavaFXのペインで絶対配置ノードを移動する最適な方法は何ですか?
これはノードを移動するコントローラです。
ノードのタイトルをユーザーがクリックは、その後XおよびYは、保存されMoused dragged handler
に使用されている押圧
public class Controller extends AbstractController {
/**
* Mouse pressed X position.
*/
private double mousePressedX;
/**
* Mouse pressed Y position.
*/
private double mousePressedY;
/**
* Insets that were when user pressed mouse.
*/
private Insets mousePressedInsets;
/**
* Mouse pressed handler.
* @param event
*/
@FXML
public void handleTitlePaneMousePressed(final MouseEvent event) {
Node node = (Node) getView().getFxView();
mousePressedX = event.getScreenX();
mousePressedY = event.getScreenY();
mousePressedInsets = StackPane.getMargin(node);
if (mousePressedInsets == null) {
mousePressedInsets = new Insets(0, 0, 0, 0);
}
}
/**
* Moused dragged handler.
* @param event
*/
@FXML
public void handleTitlePaneMouseDragged(final MouseEvent event) {
Node node = (Node) getView().getFxView();
double deltaX = event.getScreenX() - mousePressedX;
double deltaY = event.getScreenY() - mousePressedY;
Insets newInsets =
new Insets(mousePressedInsets.getTop() + deltaY, 0, 0, mousePressedInsets.getLeft() + deltaX);
StackPane.setMargin(node, newInsets);
}
}
。コードは必要なときに機能します。唯一の問題は、マウスの移動とノードモードの間に少しの遅れがあることです。知らない - 私は、Linuxを使用するかもしれないので、
は、私は次のように設定それJVM-Djavafx.animation.fullspeed=true
-Dprism.vsync=false
を追加しようとしました。しかし、それは助けにはなりませんでした。
さらに最適な方法は、JavaFXの絶対位置にあるノードを移動しますか?
'Node'sを移動する必要がある場合は、' StackPane'を使用しないでください。 – Sedrick
https://stackoverflow.com/questions/10682107/correct-way-to-move-a-node-by-dragging-in-javafx-2 – Sedrick