[英]What is the optimal way to move absolute positioned Node in Pane in JavaFX?
我有一個窗格(1440x800)和一個節點(400x300),需要在該窗格內移動。 因此對於Pane,我采用了StackPane;對於Node,我采用了VBox。
這是移動節點的控制器。
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);
}
}
當用戶單擊該節點的標題時,然后按X和Y保存並在Moused dragged handler
。 該代碼按我的需要工作。 唯一的問題是鼠標移動和節點模式之間有一點延遲。
我試圖在JVM上添加以下設置
-Djavafx.animation.fullspeed=true
-Dprism.vsync=false
但這並沒有幫助,也許是因為我使用Linux-不知道。
在JavaFX中,還有另一種更優化的方法來移動Pane中的絕對定位Node嗎?
您的代碼一直在與StackPane的布局機制作斗爭。 對於絕對定位節點,應始終直接使用窗格。 在某些情況下,也可以使用AnchorPane。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.