2016-01-21 24 views
6

Mam dwa monitory. Mam Eclipse otwarte na drugim monitorze, ale kiedy uruchamiam mój kod JavaFX, okno JavaFX zawsze otwiera się na pierwszym monitorze i za każdym razem muszę go przeciągnąć na drugi monitor, aby go użyć.Wybierz monitor, który ma otwarte okno JavaFX w

Muszę to zrobić, ponieważ kiedy otwiera się na pierwszym monitorze, żaden z komponentów wewnątrz sceny nie jest załadowany. Ładuje się tylko wtedy, gdy przeciągnę go na drugi monitor. Ale kiedy odłączę drugi monitor, ładuje się prawidłowo.

Czy ktoś może mi pomóc? Jak domyślnie otworzyć okno na drugim monitorze?

Uwaga: moim pierwszym monitorem jest MacBook Pro, a drugim jest iMac używany jako monitor zewnętrzny.

Odpowiadając uwagami:

Problem składniki nie ładuje poprawnie na screen1 dzieje się z każdym prostego kodu JavaFX. Na przykład i dla wygody, biorę kod, który @Sergey podał jako odpowiedź.

Kod:

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); 
    } 
} 

Kiedy uruchomić ten od Screen2 albo z Eclipse lub z terminala, to jest to, co na ekranie 1 pojawi się: Faulty load Zmiana rozmiaru okna nie pokazuje mi składników, ale tylko zoomy im. Nie mogę również kliknąć przycisków.

Kiedy przeciągnij na ekranie 2, staje się tak: loaded

z dwoma innymi monitory wciąż podłączony, jeśli przeciągnij eclipse do screen1 i uruchomić kod Stamtąd ładuje poprawnie: runs properly

Powinienem również dodać, że po przeciągnięciu go na inny ekran i załadowaniu komponentów, działają one dobrze na każdym ekranie.

+1

Możliwe, że uda ci się coś wypracować za pomocą 'Ekranu '. Zobacz [tutaj] (https://community.oracle.com/thread/2593365?tstart=0) (Brak czasu na wykonanie pełnej odpowiedzi w tym momencie). – Itai

+0

Zgadzam się z @sillyfly na użycie 'Screen'. Jednak z twojego opisu, ładowanie treści tylko na drugim ekranie wydaje mi się, że jest coś poważnie nie tak lub czy to zamierzone zachowanie? Jeśli nie, należy zbadać to i naprawić, zamiast implementować obejście. – hotzst

+1

Czy możesz podać przykład, który mógłbym przetestować na mojej konfiguracji z dwoma monitorami? –

Odpowiedz

6

Możesz iterować Screen.getScreens() i przenieść swój stage do wymaganego. Zobacz przykład poniżej.

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); 
    } 
} 

Niestety nie mogę pomóc, aby składniki nie ładowały się na ekranie podstawowym. Podaj więcej szczegółów, aby rozwiązać ten problem (które komponenty, w jaki sposób zostały utworzone, próbka kodu itp.).

+0

Dodałem więcej informacji do pytania –

Powiązane problemy