【问题标题】:How to enable drag for transparent AnchorPane?如何启用透明 AnchorPane 的拖动?
【发布时间】:2021-08-15 05:13:58
【问题描述】:

我需要让我的底部AnchorPane 透明,我使用下面的代码来做到这一点。它可以工作,但之后我无法通过拖动移动我的应用程序?

Parent root = FXMLLoader.load(getClass().getResource("view/DashBoardForm.fxml"));
primaryStage.initStyle(StageStyle.TRANSPARENT);
Scene scene = new Scene(root);
scene.setFill(Color.TRANSPARENT);
primaryStage.setScene(scene);
primaryStage.show();

我无法在工作区中移动应用程序;我该如何解决?

【问题讨论】:

    标签: java javafx scenebuilder


    【解决方案1】:

    你可以看看这个例子

        public class Demo extends Application {
    
        double x = 0;
        double y = 0;
    
        double sceneX = 0;
        double sceneY = 0;
    
        @Override
        public void start(Stage primaryStage) {
            var anchorPane = new AnchorPane();
            var button = new Button("button");
            var background = new Background(new BackgroundFill(Paint.valueOf("#FFB5C5"), new CornerRadii(15), new Insets(0)));
            anchorPane.setBackground(background);
            anchorPane.setBorder(new Border(new BorderStroke(Color.valueOf("#912CEE"), BorderStrokeStyle.SOLID, new CornerRadii(15), new BorderWidths(2), new Insets(0))));
    
            button.setOnMousePressed(event -> {
                x = event.getX();
                y = event.getY();
            });
    
            button.setOnMouseDragged(event -> {
                var sceneX = event.getSceneX();
                var sceneY = event.getSceneY();
                AnchorPane.setLeftAnchor(button, sceneX - x);
                AnchorPane.setTopAnchor(button, sceneY - y);
            });
    
            anchorPane.getChildren().add(button);
            AnchorPane.setTopAnchor(button, 100.0);
            AnchorPane.setLeftAnchor(button, 100.0);
            var scene = new Scene(anchorPane);
            scene.setFill(Paint.valueOf("#ffffff00"));
    
            scene.setOnMousePressed(event -> {
                sceneX = event.getSceneX() - primaryStage.getX();
                sceneY = event.getSceneY() - primaryStage.getY();
            });
    
            scene.setOnMouseDragged(event -> {
                primaryStage.setX(event.getScreenX() - sceneX);
                primaryStage.setY(event.getScreenY() - sceneY);
            });
    
            primaryStage.initStyle(StageStyle.TRANSPARENT);
            primaryStage.setScene(scene);
            primaryStage.setTitle("JavaFx");
            primaryStage.setWidth(800);
            primaryStage.setHeight(800);
            primaryStage.show();
        }
    }
    

    但我认为会有更好的方法

    【讨论】:

    • 强烈建议不要仅链接答案(外部参考往往会随着时间的推移而逐渐消失) - 请在此处发布代码
    • 考虑为background 使用半透明颜色,例如FFB5C57F.
    • @kleopatra 是正确的,但是除了工作示例之外,指向您的repository 的链接将允许未来的访问者看到您的代码发展时的更新。
    • @trashgod 这个方法很棒,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多