2017-11-02 1 views
0

의 내가 세 가지 자바 FX 단계가 있다고 가정 해 봅시다 : A, B와 C 자신의 열려있는 창에 각을 다음과 같은 행동을 목표로하고있다 :JFX는 : 단계 순서를 감지/다른 단계의 ontop을 무대 잠금

하는 경우 A는 자연적으로, B는 C가 포커스를 복용하면 다시 -> A-C-B

에서 C의 앞과 뒤에 표시해야합니다, B 포커스를 복용하는 경우 -> A-B-C

B의 ontop을 ontop의와 C 나타납니다, 초점 -> A-B-C

합니다

toFront() 함수를 알고 있고 스테이지 중 하나가 포커스를 다시 가져올 때마다 올바른 순서로 각 스테이지에 toFront()을 호출하여 수동으로 순서를 적용하려고 시도했으나 원치 않는 깜박임이 발생합니다. 이미 올바른 위치에 있습니다.

모달 윈도우 시스템을 사용할 수 없습니다. 모든 창을 병렬로 작동해야하기 때문입니다.

이것을 달성 할 방법이 있습니까?

미리 감사드립니다.

답변

0

같은 문제가있었습니다. 내가 발견 할 수있는 유일한 "해킹"은 스테이지에 포커스가있는 순서를 저장 한 다음 모든 단계에서 역순으로 이동하고 .toFront()를 호출하는 것입니다.

무대가 포커스를 얻을 때마다 열려있는 스테이지 목록 맨 위에 놓습니다. 그렇다면 Stage가 .toFont() 호출을받을 때마다 Focus를 얻으므로 EventHandler를 전역 적으로 차단합니다.

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; 
      } 
     } 
     } 
    }); 
관련 문제