2012-06-01 2 views
5

Надеюсь, я не отправляю дублирующий вопрос, но я не мог найти такой вопрос, так что, может быть, я в безопасности? В любом случае ...Java GUI Fullscreen для нескольких экранов

Для приложений, которые я создаю, у меня одновременно будут открываться два приложения (два отдельных процесса и окна). Компьютер, на котором будут работать эти приложения, будет иметь несколько мониторов. Я хочу, чтобы первое приложение/окно отображалось в полноэкранном режиме и занимало один из моих мониторов (легкая часть), а второй - полноэкранный режим на втором мониторе. Если это возможно, я бы хотел, чтобы они инициализировали этот путь.

На данный момент я делаю мои окна в полноэкранный режим, используя этот код:

this.setVisible(false); 
this.setUndecorated(true); 
this.setResizable(false); 
myDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
myDevice.setFullScreenWindow(this); 

Класс, что это в является расширением класса JFrame и MyDevice относится к типу «GraphicsDevice». Конечно, возможно, что есть лучший способ сделать мое окно полноэкранным, чтобы у меня было два разных приложения в полноэкранном режиме на двух разных мониторах.

Если бы я был каким-то образом неясен, скажите, и я попытаюсь внести изменения в разъяснения!

ответ

5

Во-первых, вам нужно поместить кадры на каждое экранное устройство.

frame1.setLocation(pointOnFirstScreen); 
frame2.setLocation(pointOnSecondScreen); 

Затем, чтобы максимизировать кадр, просто вызовите это на JFrame:

frame.setExtendedState(Frame.MAXIMIZED_BOTH); 

Вот рабочий пример, иллюстрирующий, что:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Frame; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.Point; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class Test { 
    protected void initUI() { 
     Point p1 = null; 
     Point p2 = null; 
     for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) { 
      if (p1 == null) { 
       p1 = gd.getDefaultConfiguration().getBounds().getLocation(); 
      } else if (p2 == null) { 
       p2 = gd.getDefaultConfiguration().getBounds().getLocation(); 
      } 
     } 
     if (p2 == null) { 
      p2 = p1; 
     } 
     createFrameAtLocation(p1); 
     createFrameAtLocation(p2); 
    } 

    private void createFrameAtLocation(Point p) { 
     final JFrame frame = new JFrame(); 
     frame.setTitle("Test frame on two screens"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(new BorderLayout()); 
     final JTextArea textareaA = new JTextArea(24, 80); 
     textareaA.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1)); 
     panel.add(textareaA, BorderLayout.CENTER); 
     frame.setLocation(p); 
     frame.add(panel); 
     frame.pack(); 
     frame.setExtendedState(Frame.MAXIMIZED_BOTH); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Test().initUI(); 
      } 
     }); 
    } 

} 
+0

Здравствуйте, Спасибо за быстрый ответ ! Однако, похоже, это ничего не делало. Я прокомментировал, что я использовал раньше, чтобы установить кадр в полноэкранном режиме и добавил, что да, обе программы вошли в полноэкранный режим, но оба они все еще находятся на одном мониторе. Мне нужно было сделать два приложения в полноэкранном режиме, но на отдельных мониторах. (При инициализации также, если это возможно) – Sephallia

+0

@Sephallia Я обновляю свой пост полноправным примером, который отправляет два кадра на два экрана (если у вас есть 2 экрана, конечно). Хитрость заключается в том, чтобы расположить кадр на двух отдельных экранах и затем максимизировать их. –

+0

Эй, мне действительно не нужны полные рабочие примеры. Часть, которой вы отсутствовали, была setLocation. Я подумал, что, возможно, мне придется это задействовать, но я действительно не знал, что мне нужно использовать для «точки». Большое спасибо! Я бы поднял ваш пост, но у меня все еще нет 15 репутации x :. Сожалею! – Sephallia