0
我想開發一個應用程序,用戶可以從一個托盤拖動一個按鈕,並將其放到畫布上來創建工作流程。一旦用戶將一個按鈕放到畫布上,他應該能夠雙擊按鈕打開一個表單來更新細節並保存。按鈕拖放在JavaFX
我需要的幫助是實現拖放部分。任何人都可以幫我請
謝謝!
我想開發一個應用程序,用戶可以從一個托盤拖動一個按鈕,並將其放到畫布上來創建工作流程。一旦用戶將一個按鈕放到畫布上,他應該能夠雙擊按鈕打開一個表單來更新細節並保存。按鈕拖放在JavaFX
我需要的幫助是實現拖放部分。任何人都可以幫我請
謝謝!
下面是我已經實現拖放按鈕,雙擊事件
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);
}
感謝Keyur,我會試試這個,看看 – HarryB