Java Toolkit Getting Second screen size

Tengo dos pantallas conectadas a mi computadora y me preguntaba si había alguna forma en JFrame o Toolkit de detectar en qué pantalla estaba la ventana.

Tengo este código:

java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 

Lo cual me da el tamaño de pantalla de mi pantalla principal, pero ¿cómo puedo obtener el tamaño de mi segunda pantalla o detectar en qué pantalla está?

Deberías echar un vistazo a GraphicsEnvironment .

En particular, getScreenDevices() :

Devuelve una matriz de todos los objetos GraphicsDevice de pantalla.

Puede obtener las dimensiones de esos objetos GraphicDevice (indirectamente, a través de getDisplayMode ). (Esa página también muestra cómo poner un marco en un dispositivo específico).

Y puede pasar de un JFrame a su dispositivo a través del método getGraphicsConfigration() , que devuelve una GraphicsConfiguration que tiene un getDevice() . (El método getIDstring() probablemente le permitirá diferenciar entre las pantallas).

Mira este hilo en StackOverflow . El código del OP usa este código:

 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for(GraphicsDevice curGs : gs) { GraphicsConfiguration[] gc = curGs.getConfigurations(); for(GraphicsConfiguration curGc : gc) { Rectangle bounds = curGc.getBounds(); System.out.println(bounds.getX() + "," + bounds.getY() + " " + bounds.getWidth() + "x" + bounds.getHeight()); } } 

La salida fue:

 0.0,0.0 1024.0x768.0 0.0,0.0 1024.0x768.0 0.0,0.0 1024.0x768.0 0.0,0.0 1024.0x768.0 0.0,0.0 1024.0x768.0 0.0,0.0 1024.0x768.0 1024.0,0.0 1024.0x768.0 1024.0,0.0 1024.0x768.0 1024.0,0.0 1024.0x768.0 1024.0,0.0 1024.0x768.0 1024.0,0.0 1024.0x768.0 1024.0,0.0 1024.0x768.0 

Entonces, puede ver que devuelve dos pantallas. Tenía dos pantallas de 1024×768, colocadas una al lado de la otra. El código se puede optimizar, ya que solo quieres ancho y alto:

 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for(GraphicsDevice curGs : gs) { DisplayMode dm = curGs.getDisplayMode(); System.out.println(dm.getWidth() + " x " + dm.getHeight()); } 

Si usa el código que se muestra aquí , puede recorrer todos los dispositivos de GraphicsDevice en el sistema y obtener sus dimensiones. Dado que puede crear un JFrame en un GraphicsDevice específico, también puede buscar el GraphicsDevice específico en el que está JFrame obteniendo la ventana de JFrame, llamando a http://download.oracle.com/javase/6/docs/api/java/awt /Window.html#getGraphicsConfiguration () en la ventana y luego llamar a getGraphicsDevice en eso.

Directamente al código, prueba esto 🙂

  GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for (int i = 0; i < gs.length; i++) { System.out.println(gs[i].getDisplayMode().getWidth()+" "+gs[i].getDisplayMode().getHeight()); //System.out.println(java.awt.Toolkit.getDefaultToolkit().getScreenSize()); // to check default resolution of the device }