按钮拖放在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