如何只制作顶部 window active/clickable?

How do I make only the top window active/clickable?

我正在创建一个 java 应用程序,用户可以在其中单击菜单和 select 'exit'。当他们单击 'exit' 时,会出现一个弹出对话框,询问 'are you sure you want to exit?' 是或否的选项,这些按钮工作正常。

当此对话框可见时,您仍然可以单击后面的 window,这将使 window 处于活动状态并将其放置在弹出窗口上方。我不希望这种情况发生,我只希望弹出窗口 window 处于活动状态并使其保持在顶部,直到用户单击是或否。这与 window 左上角的红色 X 相同 - 我不希望用户在显示弹出窗口时能够单击它。有任何想法吗?我尝试使用

消费该事件
event.consume();

我将它放在 if 语句中,用于显示 stage2(我的弹出框)时,如果为 stage1(main window)调用 oncloserequest,则事件被消耗。这工作正常但是一旦弹出框关闭(通过 selecting no)事件仍然被消耗。

另外在弹窗显示的时候,你仍然可以点击它后面的stage1,弹窗会被送到后面。

有人提到模态对话框?这是什么?我不明白

有一个名为 stage.initOwner(Stage stg) 的 属性 允许这种情况发生。

示例:

public class JavaFXApplication4 extends Application {

@Override
public void start(Stage stage) {
   Button jb = new Button("Click");
   jb.setOnMouseClicked(new EventHandler() {
        @Override
           public void handle(Event event) {
               makeAnotherStage(stage);
           }
       });

       GridPane gp = new GridPane();
       gp.getChildren().add(jb);
       Scene s = new Scene(gp);

       stage.setScene(s);
       stage.show();

    }

    private void makeAnotherStage(Stage st){
        Stage s = new Stage();

        GridPane gp = new GridPane();
        Label l = new Label("Second Stage");
        gp.getChildren().add(l);
        Scene sc = new Scene(gp);

        s.initOwner(st);                        <------- initOwner
        s.initModality(Modality.WINDOW_MODAL);  <------- Modality property

        s.setScene(sc);
        s.requestFocus();
        s.show();
    }
}

Oracle 模态文档:https://docs.oracle.com/javafx/2/api/javafx/stage/Modality.html

来源: