Javafx JFX:在另一个阶段的顶部锁定一个阶段/检测阶段顺序

Javafx JFX:在另一个阶段的顶部锁定一个阶段/检测阶段顺序,javafx,stage,Javafx,Stage,假设我有三个Java FX阶段:A、B和C。每个阶段都有自己的打开窗口,我的目标是实现以下行为: 如果A聚焦,B应该出现在B->A-B-C的顶部,C应该出现在B->A-B-C的顶部 如果B正在对焦,Be应该出现在C的前面,A出现在后面->A-C-B 如果C正在聚焦,自然->A-B-C 我知道toFront功能,并尝试手动执行相应的命令,只要在其中一个阶段重新聚焦时以正确的顺序调用每个阶段的toFront,就会导致不希望的闪烁,因为显然无法确定哪些窗口已经在正确的位置 不幸的是,我不能使用模态窗口

假设我有三个Java FX阶段:A、B和C。每个阶段都有自己的打开窗口,我的目标是实现以下行为:

如果A聚焦,B应该出现在B->A-B-C的顶部,C应该出现在B->A-B-C的顶部

如果B正在对焦,Be应该出现在C的前面,A出现在后面->A-C-B

如果C正在聚焦,自然->A-B-C

我知道toFront功能,并尝试手动执行相应的命令,只要在其中一个阶段重新聚焦时以正确的顺序调用每个阶段的toFront,就会导致不希望的闪烁,因为显然无法确定哪些窗口已经在正确的位置

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

有没有办法做到这一点

万分感谢

也有同样的问题。 我能找到的唯一方法是存储阶段获得焦点的顺序,然后以相反的顺序遍历所有阶段并调用.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;
            }
        }
        }
    });