2012-06-01 28 views
5

Mam nadzieję, że nie publikuję duplikatu pytania, ale nie udało mi się znaleźć takiego pytania, więc może jestem bezpieczny? W każdym razie ...Java GUI Pełny ekran dla wielu ekranów

Dla aplikacji, które robię, będę mieć dwie aplikacje (dwa oddzielne procesy i okna) otwarte w tym samym czasie. Komputer, na którym będą uruchomione te aplikacje, będzie miał wiele monitorów. Chcę, aby pierwsza aplikacja/okno znalazło się w trybie pełnoekranowym i zajmowało jeden z moich monitorów (łatwą część), a drugie było pełnoekranowe na drugim monitorze. Jeśli to możliwe, chciałbym, aby zainicjowali w ten sposób.

Obecnie robię moje okna na pełnym ekranie przy użyciu tego kodu:

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

Klasa że jest w to rozszerzenie klasy JFrame i myDevice jest typu „GraphicsDevice”. Z pewnością możliwe jest, że istnieje lepszy sposób na pełne wyświetlanie mojego okna, dzięki czemu mogę mieć dwie różne aplikacje na pełnym ekranie na dwóch różnych monitorach.

Gdybym był w jakikolwiek sposób niejasny, proszę powiedz, a postaram się edytować w wyjaśnieniach!

Odpowiedz

5

Najpierw należy ustawić ramki na każdym urządzeniu z ekranem.

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

Następnie, aby zmaksymalizować ramkę, po prostu zadzwoń to na JFrame:

frame.setExtendedState(Frame.MAXIMIZED_BOTH); 

Oto przykład roboczych ilustrujący, że:

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

Witam, Dzięki za szybką odpowiedź ! Jednak nie wydawało się to nic. Skomentowałem to, co wcześniej użyłem, aby ustawić ramkę na pełny ekran i dodałem, że tak, obie aplikacje pracowały w trybie pełnoekranowym, ale oba nadal znajdowały się na tym samym monitorze. Potrzebowałem dwóch aplikacji na pełnym ekranie, ale na osobnych monitorach. (Jeśli to możliwe, również przy inicjalizacji) – Sephallia

+0

@Sephallia Aktualizuję swój post w pełni działającym przykładem, który wywołuje dwie klatki na dwóch ekranach (jeśli masz oczywiście 2 ekrany). Sztuką jest ustawienie ramki na dwóch oddzielnych ekranach, a następnie ich maksymalizacja. –

+0

Hej, naprawdę nie potrzebowałem pełnych przykładów pracy. Część, której wcześniej brakowało, to setLocation. Pomyślałem, że być może będę musiał to zaangażować, ale naprawdę nie wiedziałem, co może być potrzebne do "punktu". Dziękuję Ci bardzo! Pobrałem wiadomość, ale nadal nie mam 15 punktów reputacji: Przepraszam! – Sephallia