2016-01-21 9 views
6

2つのモニターがあります。私は2番目のモニターでEclipseを開いていますが、JavaFXコードを実行すると、JavaFXウィンドウは常に最初のモニターで開き、2番目のモニターにドラッグして使用するたびに開きます。JavaFXウィンドウを開くモニターを選択します

最初のモニターで開くと、シーン内のコンポーネントがロードされないため、これを行う必要があります。 2番目のモニターにドラッグするとロードされます。しかし、私は2番目のモニタを切断すると、正しくロードされます。

誰かお手伝いできますか?デフォルトでは、2番目のモニタでウィンドウを開くにはどうしたらいいですか?

NB:私の最初のモニターはMacBook Proで、2番目のモニターはiMacを外付けモニターとして使用しています。

のコメントへの対応:

コンポーネントがSCREEN1上で正しく読み込まれていないの問題は、任意の単純JavaFXのコードで発生

。たとえば、便宜上、@ Sergeyが回答として与えたコードを取ります。

コード:

public class FXScreens extends Application { 

    @Override 
    public void start(Stage stage) { 
     VBox root = new VBox(10); 
     root.setAlignment(Pos.CENTER); 
     Scene scene = new Scene(root, 200, 250); 

     int index = 1; 
     for (Screen screen : Screen.getScreens()) { 
      Rectangle2D bounds = screen.getVisualBounds(); 

      Button btn = new Button("Move me to Screen " + index++); 
      btn.setOnAction((e) -> { 
       stage.setX(bounds.getMinX() + 100); 
       stage.setY(bounds.getMinY() + 100); 
      }); 
      root.getChildren().add(btn); 
     } 

     stage.setTitle("Screen Jumper"); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

私は日食でまたは端末のいずれかでScreen2にからこれを起動すると、これは画面1に表示されるものです: Faulty load ウィンドウのサイズを変更するには、私のコンポーネントを示すが、単にズームしません。それら。私はボタンをクリックすることもできません。

I画面2にこれをドラッグすると、それは次のようになる:まだ接続された二つの他のモニタを loaded

、IはSCREEN1にEclipseとそこからコードを実行してドラッグすると、それが適切にロード:runs properly

他の画面にドラッグしてコンポーネントをロードすると、どの画面でも正常に機能することを追加する必要があります。

+1

「スクリーン」で何かを解決する可能性があります。 [here](https://community.oracle.com/thread/2593365?tstart=0)を参照してください(現時点で完全回答になるまで時間はかかりません)。 – Itai

+0

私は 'スクリーン'の使用について@sillyflyに同意します。しかし、あなたの記述からは、2番目の画面にのみロードされているコンテンツは、間違っていると思いますが、これは意図した動作ですか?そうでない場合は、それを調べて回避策を実装する代わりに修正する必要があります。 – hotzst

+1

デュアルモニタのセットアップでテストできる例を教えてください。 –

答えて

6

Screen.getScreens()を繰り返して、stageを必要なものに移動することができます。以下の例を参照してください。

public class FXScreens extends Application { 

    @Override 
    public void start(Stage stage) { 
     VBox root = new VBox(10); 
     root.setAlignment(Pos.CENTER); 
     Scene scene = new Scene(root, 200, 250); 

     int index = 1; 
     for (Screen screen : Screen.getScreens()) { 
      Rectangle2D bounds = screen.getVisualBounds(); 

      Button btn = new Button("Move me to Screen " + index++); 
      btn.setOnAction((e) -> { 
       stage.setX(bounds.getMinX() + 100); 
       stage.setY(bounds.getMinY() + 100); 
      }); 
      root.getChildren().add(btn); 
     } 

     stage.setTitle("Screen Jumper"); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

残念ながら、主な画面に読み込まれていないコンポーネントは残念ながら私は手助けできません。これに対処するための詳細を提供してください(どのコンポーネント、作成方法、コードサンプルなど)

+0

質問に詳しい情報を追加しました –

関連する問題