2017-11-02 5 views
0

だが、私は3つのJava FXステージを持っていると言う検出Aは当然、BがCにフォーカスを取っている場合は、バック-> A-C-BJFX:自分の開いているウィンドウでA、BおよびCのそれぞれと、次の動作を目指しています:</p> <p>場合は、別のステージの岩下段階をロック/ステージ順

におけるCの前とAに表示されて、Bがフォーカスを取っている場合-> A-B-C

Bの岩下岩下及びCに表示されます、注力-> A-B-C

取り

toFront()機能を認識しており、ステージの1つがフォーカスを取り戻すたびに、正しい順序で各ステージにtoFront()を呼び出すだけで、手動で強制的に実行するようにしましたが、明らかに、どのウィンドウを決定する方法がないため、すでに適切な場所にあります。

私はモーダルウィンドウシステムを使用できません。なぜなら、すべてのウィンドウが並列に動作する必要があるからです。

これを達成する方法はありますか?

大変ありがとうございます!

答えて

0

ちょうど同じ問題がありました。 私が見つけることができる唯一の "ハック"は、ステージがフォーカスを取得した順番を保存してから、すべてのステージを逆順に移動して.toFront()を呼び出すことです。

ステージがフォーカスを取得するたびに、開いているステージのリストのトップに配置されます。 それから、ステージが.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; 
      } 
     } 
     } 
    }); 
関連する問題

 関連する問題