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)
它完成了工作。
我在按下按钮时有一个弹出窗口
当我按下按钮时,会出现弹出窗口。
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)
它完成了工作。