JFX:将一个舞台锁定在另一个舞台之上/检测舞台顺序

JFX: Lock a stage ontop of another stage / detect stage order

假设我有三个 Java FX 阶段:A、B 和 C。每个都有自己的开放 window 并且我的目标是以下行为:

如果 A 获得焦点,B 应该出现在上面,C 应该出现在 B 的上面 -> A-B-C

如果B在取焦点,Be应该出现在C前面,A出现在后面-> A-C-B

如果C在取焦点,自然-> A-B-C

我知道 toFront() 函数,并尝试通过在其中一个阶段重新获得焦点时以正确的顺序简单地调用 toFront() 到每个阶段来手动执行相应的顺序,但是结果在不希望的闪烁中,因为显然没有办法确定哪个 windows 已经在正确的位置。

不幸的是,我不能使用模态-window系统,因为所有windows都需要保持并行运行。

有什么办法可以实现吗?

非常感谢!

刚遇到同样的问题。 我能找到的唯一 "hack" 是存储阶段获得焦点的顺序,然后以相反的顺序遍历所有阶段并调用 .toFront()。

每当一个阶段获得焦点时,我就会将其置于开放阶段列表的顶部。 然后我全局阻止 EventHandler,因为每次阶段收到 .toFont() 调用时它也会获得焦点。

在 Mac 上效果很好。 在 Windows

下不起作用并显示奇怪的行为
this.model.stage.focusedProperty().addListener((ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) -> {
        if (!mainModel.blockFocusRequest){
        if (t1){
            try{
                mainModel.openWindows.remove(this.model.stage);
                mainModel.openWindows.add(0,this.model.stage);
            mainModel.blockFocusRequest = true;
            for (int i=mainModel.openWindows.size()-1;i>=0;i--){
                mainModel.openWindows.get(i).toFront();
            }                              
            } finally{
                mainModel.blockFocusRequest = false;
            }
        }
        }
    });