2015-02-12 1 views
3

Работа с Java-приложением, которое запускает ряд фоновых процессов.
Если есть проблема, то появляется JOptionPane с некоторой общей информацией.
Рабочая станция имеет более одного монитора, и JOptionPane может отображаться на любом из них.
В качестве «родителя» для JOptionPane нет связанных окон.
Есть ли способ указать, на каком мониторе должен отображаться JOptionPane?Как обеспечить открытие JOptionPane на определенном мониторе?

ответ

2

Вы можете указать, где будет отображаться диалог, если вы используете JOptionPane напрямую, создав его. Пример:

JOptionPane pane = new JOptionPane("Hi!"); 
JDialog dialog = pane.createDialog("Look at me"); 
dialog.setVisible(true); 

В примере, перед вызовом dialog.setVisible() вы можете расположить диалог, например:

dialog.setBounds(100, 100, 100, 100); 

Чтобы показать диалог на экране, что не используемая по умолчанию, вы должны получить (Rectangle) нужного дисплея, и вы можете поместить свое диалоговое окно в эту область.

Вот как вы можете получить список ваших дисплеев (и их границ). Код взят из Javadoc из GraphicsConfiguration):

Rectangle virtualBounds = new Rectangle(); 
GraphicsEnvironment ge = GraphicsEnvironment. 
     getLocalGraphicsEnvironment(); 
GraphicsDevice[] gs = 
     ge.getScreenDevices(); 
for (int j = 0; j < gs.length; j++) { 
    GraphicsDevice gd = gs[j]; 
    GraphicsConfiguration[] gc = 
     gd.getConfigurations(); 
    for (int i=0; i < gc.length; i++) { 
     virtualBounds = 
      virtualBounds.union(gc[i].getBounds()); 
    } 
} 
+0

кажется вроде как еще ошибка (родитель не на 2 дисплее, без родителей) – mKorbel

+0

Если у вас есть 4 мониторов все одного и того же размера, не эту продукцию по существу 4 элемента в массиве с одинаковыми границами или все 4 окна вычисляются как одно большое окно с 4 сегментами и каждый сегмент - подмножество общего размера? –

+0

@ user3601445 Оценки дисплея не основаны на (0; 0), они являются абсолютными и не перекрываются. Например, ваш дисплей по умолчанию должен иметь (x = 0, y = 0), и если у вас есть второй дисплей слева, он должен иметь отрицательный x, как x = -1024. Но почему бы вам просто не попробовать? Запустите код и распечатайте прямоугольники 'virtualBounds'. – icza

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