具有作为JavaFX场景填充的特定透明度后无法捕获鼠标事件

时间:2015-04-05 05:33:21

标签: javafx transparency scene

我正在尝试创建一个透明的锚点窗格,但您可以在同一时间拖动它。

我将舞台设置为透明,我为场景提供透明填充,然后在窗格上设置OnMousePressed等。

该程序对我来说非常奇怪。透明度有一定的阈值:如果低于此阈值,窗格将不会捕获鼠标事件。如果超过,那就会。

我举个例子。当我写这个例子时,我发现这里的阈值在0.5到0.6之间。这意味着:如果我将填充的透明度设置为0.5或更低,则窗口将不可拖动,如果为0.6或更高,它将是。

我的测试代码:

public class Main extends Application {

    Stage primaryStage;

    class Delta {
        double x, y;
    }

    final Delta dragDelta = new Delta();

    public void start(Stage primaryStage) {
        this.primaryStage = primaryStage;
        primaryStage.initStyle(StageStyle.TRANSPARENT);

        showMain();
    }

    public void showMain() {

        AnchorPane ap = new AnchorPane();

        ap.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                dragDelta.x = primaryStage.getX() - mouseEvent.getScreenX();
                dragDelta.y = primaryStage.getY() - mouseEvent.getScreenY();
            }
        });
        ap.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                primaryStage.setX(mouseEvent.getScreenX() + dragDelta.x);
                primaryStage.setY(mouseEvent.getScreenY() + dragDelta.y);
            }
        });

        Scene scene = new Scene(ap);
        scene.setFill(Color.rgb(252, 0, 4, 0.6));
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

你能解释或重现这种行为吗?谢谢!

1 个答案:

答案 0 :(得分:0)

这不是一个错误 - 这是一个功能。一般规则是你不能点击你看不到的东西。如果这个决定留给程序员,我宁愿这样做。