2012-06-01 22 views
5

Espero no estar publicando una pregunta duplicada, pero no pude encontrar una pregunta como esta, entonces ¿estoy seguro? De todos modos ...Java GUI Pantalla completa para pantallas múltiples

Para las aplicaciones que estoy haciendo, voy a tener dos aplicaciones (dos procesos y ventanas separadas) abiertas al mismo tiempo. La computadora en la que se ejecutarán estas aplicaciones tendrá varios monitores. Quiero la primera aplicación/ventana para pantalla completa y ocupo uno de mis monitores (parte fácil) y el otro para pantalla completa en el segundo monitor. Si es posible, me gustaría que se inicialicen de esta manera.

Por el momento, estoy haciendo mis ventanas de pantalla completa utilizando este código:

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

La clase que se trata de una extensión de la clase JFrame y MyDevice es del tipo "GraphicsDevice". Ciertamente es posible que haya una mejor manera de hacer que mi ventana tenga pantalla completa para que pueda tener dos aplicaciones diferentes de pantalla completa en dos monitores diferentes.

Si no estaba claro de ninguna manera, por favor diga y trataré de editar en las aclaraciones!

Respuesta

5

En primer lugar, debe colocar sus marcos en cada dispositivo de pantalla.

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

A continuación, para maximizar un marco, simplemente llame a esto en su JFrame:

frame.setExtendedState(Frame.MAXIMIZED_BOTH); 

Aquí es un ejemplo de trabajo que demuestra que:

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

Hola, Gracias por la pronta respuesta ! Sin embargo, eso no pareció hacer nada. Comenté lo que había usado antes para configurar mi fotograma en pantalla completa y agregué eso, y sí, ambas aplicaciones fueron a pantalla completa, pero ambas estaban todavía en el mismo monitor. Lo que necesitaba era hacer dos aplicaciones a pantalla completa pero en monitores separados. (Al momento de la inicialización también, si es posible) – Sephallia

+0

@Sephallia Actualizo mi publicación con un ejemplo completo que distribuye dos cuadros en dos pantallas (si tiene 2 pantallas por supuesto). El truco es posicionar el cuadro en dos pantallas separadas y luego maximizarlas. –

+0

Oye, realmente no necesitaba ejemplos completos de trabajo. La parte que te faltaba antes era la ubicación establecida. Pensé que podría necesitar involucrar eso, pero realmente no sabía lo que necesitaría usar para un "punto". ¡Muchas gracias! Renuncié a tu publicación, pero aún no tengo 15 reputación x :. ¡Lo siento! – Sephallia

Cuestiones relacionadas