JavaFX 弹出窗口阻止了背景上的第一个 mousePress

JavaFX popup blocks first mousePress on the background

我在按下按钮时有一个弹出窗口
当我按下按钮时,会出现弹出窗口。

    public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        StackPane root = new StackPane();

        root.setPrefWidth(200);
        root.setPrefHeight(200);
        Button btn = new Button("Press");

        root.getChildren().add(btn);

        root.setOnMouseDragged(e-> System.out.println("draaaag"));
        root.setOnMousePressed(e-> System.out.println("PRESSED"));
        root.setOnMouseReleased(e-> System.out.println("RELEASED !!!!!!!!!!!!!!!"));

        Scene scene = new Scene(root);

        Popup popup = new Popup();
        popup.getContent().add(new Label("POPUP"));
        popup.setAutoHide(true);
        popup.setAutoFix(true);

        

        btn.setOnMouseClicked(ev -> {
            popup.show(primaryStage);
        });

        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
}

后台有mouseDrag、mousePress和mouseRelease事件。
当我打开弹出窗口并单击根上的 时,弹出窗口按预期隐藏,但根区域仅先通知 mouseRelease 和拖动操作,而不是所有其他操作。

我想在 root 上监听 mousePress,即使弹出窗口正在显示...

弹出窗口的管理方式与您插入的不同 window。因此,您还必须在弹出窗口中插入 onMouseRelease 事件:

popup.getContent().get(0).setOnMouseReleased(e -> System.out.println("Popup clicked!"));

您还可以添加具有不同背景的样式标签以突出显示弹出窗口:

Label label = new Label("POPUP");
label.setStyle("-fx-background-color: grey;");
popup.getContent().add(label);
label.setOnMouseReleased(e -> System.out.println("Popup clicked!"));

我得到了答案。
该事件在自动隐藏时消耗
所以

popup.setConsumeAutoHidingEvent(false)

它完成了工作。