如何只制作顶部 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
来源:
我正在创建一个 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
来源: