2015-07-01 1 views
1

открыть сцену, используя следующий код:JavaFX Этап открыт на конкретном экране - странное поведение

ObservableList<Screen> screens = Screen.getScreens(); 
    if(screens.size()>1){ 
     Rectangle2D rec = screens.get(preferredScreen).getVisualBounds(); 
     stage.setX(rec.getMinX()); 
     stage.setY(rec.getMinY()); 
    } 

Когда вызывается из окна на первичном скрининге, это работает отлично.

Когда вызываются из неосновного экрана, этап открывается предпочтительный экран, а затем переходит к экрану, где мышь находится.

Кажется мне быть «особенностью» Windows. Каким будет лучший способ получить это окно на правом экране?

+1

Как устанавливается ваш монитор? Расширенные, дублированные или показываются только в одном? – NwDev

+0

увеличить рабочий стол. – SalkinD

ответ

0

В соответствии с JavaDoc Screen вы должны установить новый этап относительно основного экрана, потому что вы расширяете рабочий стол только на своем рабочем столе. Поэтому вы должны написать примерно следующее:

int preferredScreen = 1; 
    double offsetX = 0; 
    double offsetY = 0; 

    Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds(); 

    ObservableList<Screen> screens = Screen.getScreens(); 
    if(screens.size()>1){ 
     Rectangle2D rec = screens.get(preferredScreen).getVisualBounds(); 
     // upper left corner of the extended screen 
     offsetX = rec.getMinX(); 
     offsetY = rec.getMinY(); 
     // set relative to this screen 
     stage.setX(primaryScreenBounds.getMinX() + offsetX); 
     stage.setY(primaryScreenBounds.getMinY() + offsetY); 
    } 

Не удается проверить его самостоятельно, у меня есть только один монитор.

Смежные вопросы