2017-03-01 79 views
0

我想開發一個應用程序,用戶可以從一個托盤拖動一個按鈕,並將其放到畫布上來創建工作流程。一旦用戶將一個按鈕放到畫布上,他應該能夠雙擊按鈕打開一個表單來更新細節並保存。按鈕拖放在JavaFX

我需要的幫助是實現拖放部分。任何人都可以幫我請

謝謝!

回答

1

下面是我已經實現拖放按鈕,雙擊事件

double orgSceneX, orgSceneY; 
double orgTranslateX, orgTranslateY; 
int i = 1; 

@Override 
public void start(Stage primaryStage) { 
    try { 

     BorderPane root = new BorderPane(); 

     Label label = new Label(); 

     Button button = new Button("Hello"); 
     button.setOnMousePressed(buttonMousePressedEventHandler); 
     button.setOnMouseDragged(buttonOnMouseDraggedEventHandler); 
     button.setCursor(Cursor.CROSSHAIR); 

     button.setOnMouseClicked(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent mouseEvent) { 
       if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) { 
        if (mouseEvent.getClickCount() == 2) { 
         label.setText("Double Click Fire... " + i); 
         i = i + 1; 
        } 
       } 
      } 
     }); 

     HBox box = new HBox(); 
     box.setSpacing(15); 
     box.getChildren().addAll(button); 

     VBox box2 = new VBox(); 
     box2.setSpacing(50); 
     box2.getChildren().addAll(label, box); 

     root.setCenter(box2); 

     Scene scene = new Scene(root, 400, 400); 
     scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

EventHandler<MouseEvent> buttonMousePressedEventHandler = new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent t) { 
     orgSceneX = t.getSceneX(); 
     orgSceneY = t.getSceneY(); 
     orgTranslateX = ((Button) (t.getSource())).getTranslateX(); 
     orgTranslateY = ((Button) (t.getSource())).getTranslateY(); 

     ((Button) (t.getSource())).toFront(); 
    } 
}; 

EventHandler<MouseEvent> buttonOnMouseDraggedEventHandler = new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent t) { 
     double offsetX = t.getSceneX() - orgSceneX; 
     double offsetY = t.getSceneY() - orgSceneY; 
     double newTranslateX = orgTranslateX + offsetX; 
     double newTranslateY = orgTranslateY + offsetY; 

     ((Button) (t.getSource())).setTranslateX(newTranslateX); 
     ((Button) (t.getSource())).setTranslateY(newTranslateY); 
    } 
}; 

public static void main(String[] args) { 
    launch(args); 
} 
+0

感謝Keyur,我會試試這個,看看 – HarryB