在Javafx中拖动按钮

时间:2014-03-03 05:53:48

标签: java drag-and-drop javafx draggable drag

我有一个按钮,我想拖动它,并在一段时间后放下它。 我在线搜索了我遇到的最有用的东西是this链接。 与提供的链接相似,我希望在光标移动的任何地方拖动按钮,只有当鼠标按钮上升时,按钮才会下降。 如何解决这个问题?提前感谢

2 个答案:

答案 0 :(得分:2)

我设法制作了一个borderPane并在其上面放了一个按钮。释放鼠标时,按钮会被拖动和释放!

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class ButtonDraggable extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        BorderPane borderPane = new BorderPane();
        borderPane.setPrefSize(800, 600);
        final Button button = new Button("Drag ME !");

        final Delta dragDelta = new Delta();
        button.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                // record a delta distance for the drag and drop operation.
                dragDelta.x = button.getLayoutX() - mouseEvent.getSceneX();
                dragDelta.y = button.getLayoutY() - mouseEvent.getSceneY();
                button.setCursor(Cursor.MOVE);
            }
        });
        button.setOnMouseReleased(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                button.setCursor(Cursor.HAND);
            }
        });
        button.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                button.setLayoutX(mouseEvent.getSceneX() + dragDelta.x);
                button.setLayoutY(mouseEvent.getSceneY() + dragDelta.y);
            }
        });
        button.setOnMouseEntered(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                button.setCursor(Cursor.HAND);
            }
        });

        borderPane.setCenter(button);

        Scene scene = new Scene(borderPane);

        stage.setScene(scene);
        stage.show();

    }

    // records relative x and y co-ordinates.
    class Delta {
        double x, y;
    }

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

}

如有任何疑问,请随时发表评论!

<强> -AA

答案 1 :(得分:1)

嘿,上面的代码对我来说不起作用。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class ButtonDraggable extends Application{
    @Override
    public void start(Stage primaryStage){
        // button and pane are created
        Button btOK = new Button("OK");
        Pane pane = new Pane();
        // this code drags the button
        btOK.setOnMouseDragged(e -> {
        btOK.setLayoutX(e.getSceneX());
        btOK.setLayoutY(e.getSceneY());
         });
        // button added to pane and pane added to scene
        pane.getChildren().add(btOK);
        Scene scene = new Scene(pane,200, 250);
        primaryStage.setTitle("A Draggable button");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args){
        Application.launch(args);
    }
}