在我的应用程序中,我有几个独立的(非模态)阶段。将所有阶段带到前面
我想以下行为:
- 主舞台最小化时,所有其他阶段应尽量减少
- 当主舞台是未最小化,所有其他的各个阶段应取消最小化
- 选择了任何的级的情况下,如果一些其它级是不可见的(隐藏在例如其他应用),它们应该被带到前面
的音响前两个要求是容易的(除非我错过了什么),是这样的:
mainStage.iconifiedProperty().addListener((observable, oldValue, newValue) -> {
if (newValue != null && newValue != oldValue) {
for (Stage s : otherStages) { s.setIconified(newValue); }
}
});
但是我卡上的第三个。我尝试过使用focusedProperty
,但它不起作用(例如,如果我点击其中一个阶段的菜单,例如,因为它首先将其他阶段置于前面,则失去焦点并且菜单无法打开)。 。
//do this for each stage
stage.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (Boolean.TRUE.equals(newValue) && newValue != oldValue) {
for (Stage s : otherStages) {
s.setIconified(false);
s.toFront();
}
//request the focus back, but that creates issues
stage.requestFocus();
}
});
关于如何实现第三个要求的任何想法?
从甲骨文文档https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Stage.html#initOwner-javafx.stage.Window- “A阶段可任选地有一个所有者窗口当一个窗口是一个阶段的所有者时,它被认为是该阶段的父代,当一个父窗口关闭时,所有的后代窗口都被关闭,同样的链式行为被应用于一个被图标化的父窗口。将始终位于其父窗口的顶部,所有者必须在舞台可见之前进行初始化。“ – Linuslabo