2012-06-01 25 views
5

Ich hoffe, ich poste keine doppelte Frage, aber ich konnte keine Frage so finden, also bin ich vielleicht sicher? Wie auch immer ...Java GUI Vollbild für mehrere Bildschirme

Für die Anwendungen, die ich mache, werde ich zwei Anwendungen (zwei getrennte Prozesse und Fenster) zur gleichen Zeit geöffnet haben. Der Computer, auf dem diese Anwendungen ausgeführt werden, verfügt über mehrere Monitore. Ich möchte die erste Anwendung/Fenster auf Vollbild und besetze einen meiner Monitore (einfacher Teil), und die andere auf dem zweiten Monitor im Vollbildmodus. Wenn möglich, möchte ich, dass sie so initialisiert werden.

Im Moment ich meine Fenster, indem Sie diesen Code Vollbild mache:

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

Die Klasse, das in ist eine Erweiterung der JFrame Klasse und MyDevice ist vom Typ „Graphics“. Es ist sicherlich möglich, dass es eine bessere Möglichkeit gibt, mein Fenster in Vollbild zu verwandeln, so dass ich zwei verschiedene Anwendungen im Vollbildmodus über zwei verschiedene Monitore haben kann.

Wenn ich in irgendeiner Weise unklar war, sagen Sie bitte, und ich werde versuchen, in Klarstellungen zu bearbeiten!

Antwort

5

Zuerst müssen Sie Ihre Bilder auf jedem Bildschirm Geräte positionieren.

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

Dann einen Rahmen zu maximieren, dies einfach auf JFrame nennen:

frame.setExtendedState(Frame.MAXIMIZED_BOTH); 

Hier ist ein funktionierendes Beispiel, dass darstellt:

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

Hallo, Dank für die prompte Antwort ! Das schien jedoch nichts zu tun. Ich habe das, was ich vorher benutzt habe, kommentiert, um meinen Frame auf den Vollbildmodus zu setzen, und hinzugefügt, und ja, beide Anwendungen waren im Vollbildmodus, aber sie befanden sich beide immer noch auf demselben Monitor. Was ich brauchte, war zwei Anwendungen im Vollbildmodus, aber auf separaten Monitoren zu machen. (Auch bei der Initialisierung, wenn möglich) – Sephallia

+0

@Sephallia Ich aktualisiere meinen Post mit einem voll funktionsfähigen Beispiel, das zwei Frames auf zwei Bildschirmen ausliefert (wenn Sie natürlich zwei Bildschirme haben). Der Trick besteht darin, den Rahmen auf zwei separaten Bildschirmen zu positionieren und sie dann zu maximieren. –

+0

Hey, ich brauchte keine vollständigen Arbeitsbeispiele. Der Teil, den du vorher vermisstest, war der setLocation. Ich dachte, ich müsste das vielleicht einbeziehen, aber ich wusste wirklich nicht, was ich für einen "Punkt" brauchen könnte. Vielen Dank! Ich würde deinen Beitrag auffrischen, aber ich habe immer noch keinen Ruf x:. Es tut uns leid! – Sephallia