2017-03-01 80 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