Как развернуть JFrame в конфигурации с несколькими мониторами

#java #swing #jframe #multiple-monitors

#java #swing #jframe #несколько мониторов

Вопрос:

Я хотел бы создать приложение с 2 окнами. Первый всегда должен быть на первом мониторе и не может быть развернут. Второй должен быть запущен на втором мониторе (идеальный пример — режим презентации PowerPoint), выполняется «поверх» окна любого другого приложения и всегда развернут. Это окно запускается с помощью прослушивателя, заданного первому окну. Обратите внимание, что эти «мониторы» могут быть ЖК-проекторами, используемыми в презентациях, или настоящими мониторами настольных компьютеров.

Я знаю, что существует GraphicsEnvironment API, и мы можем знать, обрабатывается ли наша конфигурация монитора как единый монитор или обрабатывается отдельно. Но я не знаю, как это реализовать. Я имею в виду, поскольку конфигурации экрана могут обрабатываться по-разному в зависимости от их графических карт, как мы их проверяем?

Например, если есть 3 монитора, которые обрабатываются как один монитор с большим разрешением, то, возможно, мы можем установить координату x0 для второго окна как: total_width * 2/3. Но что, если оно обрабатывается как отдельные мониторы ..?

Спасибо.

Комментарии:

1. Посмотрите на эту ссылку: download.oracle.com/javase/1.3/docs/guide/2d/spec /… , Это может помочь. он действительно старый, но вы сможете найти что-то подобное в новой версии Java

2. Я думаю, что даже если несколько мониторов обрабатываются как «один» в том смысле, что отображаемый контент распространяется на все из них, как это было бы на одном гигантском мониторе, вы все равно можете получить каждый монитор по отдельности с помощью: GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge .getScreenDevices(); а затем установите свой фрейм на любой экран, который вы хотите, используя gs [i].setFullScreenWindow( myJFrame);

3. вау .. спасибо за быстрые ответы. Я попробую их ^^

Ответ №1:

@Zecas: Да, это сработало хорошо. Извините, что не разместил ответ здесь. Я совершенно забыл. Итак, решение в точности соответствует заявленному ShivanDragon, мы можем получить каждый монитор по отдельности, сначала получив нашу GraphicsEnvironment, а затем получить наши экранные устройства из среды:

 GraphicsEnvironment ge = GraphicsEnvironment .getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();
  

После этого просто используйте:

 gs[_screen_index].setFullSCreenWindow(_frame)
  

Комментарии:

1. К сожалению, я не могу заставить это работать на Ubuntu Linux .. с видеокартой Nvidia.. Не уверен, связана ли моя конкретная проблема с тем, как настроены мои дисплеи с X, возможно, не отображается в Java как отдельные дисплеи или что-то в этом роде..