切换到第三方窗口后再切回应用程序阶段时,父级阶段被隐藏

8

我的父舞台"stage1"正在打开子舞台"stage2",我已经将子舞台的模态设置如下。

stage2.initModality(Modality.APPLICATION_MODAL);

现在我从stage1打开stage2时,stage1出现在stage2后面,这是可以预料的。但是当我按下"Ctrl+Tab"键时,控制切换到第三方应用程序,例如"Outlook",然后我再次按下"Ctrl+Tab"键,它返回到我们的主应用程序,并显示stage2,但stage1仍然隐藏。我期望的是stage1应该被隐藏在stage2后面。
任何帮助都将不胜感激。
1个回答

6
这是因为Stage2.getOwner() == null为真。你的期望是当它为false时的工作方式。所以为了解决你的问题,请按照以下步骤操作。
Stage2.initOwner(Stage1);

ediit

这是一个演示

@Override
public void start(Stage stage) {
    Pane p = new Pane();
    p.setStyle("-fx-background-color: red");
    stage.setTitle("I AM THE PARENT");
    Scene scene = new Scene(p);
    stage.setWidth(600);
    stage.setHeight(600);
    stage.setScene(scene);
    stage.show();
    Stage s = new Stage(StageStyle.DECORATED);
    s.initModality(Modality.APPLICATION_MODAL);
    p = new Pane();
    p.setStyle("-fx-background-color: yellow");
    s.setScene(new Scene(p,150,150));
    //s.initOwner(stage); //with this commented it wont work
    s.show();
}

此外,您会注意到当您按下CTRL + TAB时,弹出窗口只显示您的第二个窗口STAGE2,因为它没有父级,但是当它有所有者时,它只会显示所有者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接