我是一个创造性的Java应用程序,用户可以单击菜单并选择“退出”。当他们点击“退出”时会出现一个弹出对话框,询问“你确定要退出吗?”是或否的选项是存在的,这些按钮工作正常。
当此对话框可见时,您仍然可以单击后面的窗口,这将使该窗口处于活动状态并将其置于弹出窗口上方。我不希望这种情况发生,我只希望弹出窗口处于活动状态,并且在用户单击是或否之前保持在顶部。对于窗口左上角的红色X,这是相同的 - 如果弹出窗口显示,我不希望用户能够单击此项。有任何想法吗?我已经开始使用
来消费这个活动了event.consume();
我把它放在if语句中,当stage2(我的弹出框)显示时,如果为stage1(主窗口)调用oncloserequest,那么事件就被消耗了。这工作正常,但一旦弹出框关闭(通过选择否),事件仍然被消耗。
此外,当弹出对话框显示时,您仍然可以点击它后面的stage1,弹出框将被发送到后面。
有人提到模态对话框?这是什么?我不明白
答案 0 :(得分:1)
有一个名为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
来源: How to make the opened window must close at first before back to the main?