2013-08-11 2 views
7

У меня есть это непараметризованное окно:Как перетащить непараметризованное окно

public static void initStartPage(final Stage primaryStage) { 

     final Stage startPage = new Stage(); 
     startPage.initStyle(StageStyle.UNDECORATED); 
     //startPage.initOwner(primaryStage); 
     //startPage.toFront(); 
     Scene scene = new Scene(agentsPanel(), 900, 500); 
     startPage.setScene(scene); 
     startPage.show(); 

    } 

Я заинтересован, как я могу сделать это перетащить dragable? Я хочу, чтобы я навел курсор мыши на него, чтобы перетащить его, чтобы изменить его положение.

PS

Я испытал это решение, но это не работает:

private static FlowPane flow; 
    private static BorderPane bpi; 

    public static void initStartPage(final Stage primaryStage) { 

     final Stage startPage = new Stage(); 
     startPage.initStyle(StageStyle.UNDECORATED); 
     startPage.initOwner(primaryStage); 
     //startPage.toFront(); 
     Scene scene = new Scene(agentsPanel(primaryStage), 900, 500); 
     startPage.setScene(scene); 
     startPage.show(); 

    } 

    private static double xOffset = 0; 
    private static double yOffset = 0; 

    public static BorderPane agentsPanel(final Stage primaryStage) { 

     BorderPane bp = new BorderPane(); 
     bp.setPrefSize(900, 500); 
     bp.setMaxSize(900, 500); 

     HBox thb = new HBox(10); // Set spacing between each child into the HBox 
     thb.setPadding(new Insets(15, 15, 15, 15)); 


     HBox bhb = new HBox(10); // Set spacing between each child into the HBox 
     bhb.setPadding(new Insets(15, 15, 15, 15)); 

     bp.setTop(thb); 
     bp.setBottom(bhb); 
     bp.setCenter(navigationPanel()); 


     bp.setOnMousePressed(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       xOffset = event.getSceneX(); 
       yOffset = event.getSceneY(); 
      } 
     }); 
     bp.setOnMouseDragged(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       primaryStage.setX(event.getScreenX() - xOffset); 
       primaryStage.setY(event.getScreenY() - yOffset); 
      } 
     }); 

     return bp; 

    } 
+0

Возможный дубликат e of [Как сделать незакрепленное окно подвижным/перетаскиваемым в JavaFX?] (http://stackoverflow.com/questions/13206193/how-to-make-an-undecorated-window-movable-dragable-in-javafx) – jewelsea

+0

Также дубликат [Перемещение незадекларированной сцены в JavaFX 2] (http://stackoverflow.com/questions/11780115/moving-an-undecorated-stage-in-javafx-2) – jewelsea

+0

Я обновил сообщение. Я тестировал этот код, но он не работает. –

ответ

18

Просто измените setOnMousePressed метод следующим образом:

bp.setOnMousePressed(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       xOffset = primaryStage.getX() - event.getScreenX(); 
       yOffset = primaryStage.getY() - event.getScreenY(); 
      } 
     }); 

и ваш setOnMouseDragged к этому:

bp.setOnMouseDragged(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       primaryStage.setX(event.getScreenX() + xOffset); 
       primaryStage.setY(event.getScreenY() + yOffset); 
      } 
     });