2017-08-13 14 views
0

私はペイン(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の絶対位置にあるノードを移動しますか?

+0

'Node'sを移動する必要がある場合は、' StackPane'を使用しないでください。 – Sedrick

+0

https://stackoverflow.com/questions/10682107/correct-way-to-move-a-node-by-dragging-in-javafx-2 – Sedrick

答えて

0

あなたのコードはStackPaneのレイアウトメカニズムと常に競合しています。ノードの絶対配置のためには、常にペインを直接使用する必要があります。場合によっては、AnchorPaneを使用することもできます。

+0

ありがとうございました。私はペインで試して、vbox.setLayoutX/Y()を使いました。私は同じ遅れを見る。 –

関連する問題