Para calcular el tamaño de la pantalla, puede utilizar (tomado de GraphicsConfiguration javadoc)
Rectangle virtualBounds = new Rectangle();
GraphicsEnvironment ge = GraphicsEnvironment.
getLocalGraphicsEnvironment();
GraphicsDevice[] gs =
ge.getScreenDevices();
for (int j = 0; j < gs.length; j++) {
GraphicsDevice gd = gs[j];
GraphicsConfiguration[] gc =
gd.getConfigurations();
for (int i=0; i < gc.length; i++) {
virtualBounds =
virtualBounds.union(gc[i].getBounds());
}
}
Luego, puede consultar el width
y height
de virtualBounds
.
Esto también funcionará en configuraciones de monitores múltiples.
Por lo que yo sé, no existe un método compatible con JDK para detectar cambios, por lo que la votación es su única apuesta, o use JNA y el código nativo. Si su ventana de nivel superior está maximizada, entonces cambiar el tamaño de la pantalla también cambiará el tamaño de las ventanas maximizadas, para que pueda escuchar los cambios allí también. Consulte esto sun tutorial para ver ejemplos de oyentes de componentes de escritura.
Si no tiene una ventana maximizada de nivel superior, entonces también puede lograr el mismo efecto creando una ventana oculta maximizada. No puedo decir con certeza si esto funcionará, pero vale la pena intentarlo.
Gracias por la respuesta rápida. Desafortunadamente, el fragmento de arriba sigue mostrando el tamaño anterior (1024x768) en Ubuntu 9.04. Saludos cordiales, Marton –
Eso es extraño, ya que, en esencia, usa las mismas API que la respuesta aceptada. – mdma
Sí, es extraño que GraphicsConfiguration.getBounds() devuelva un valor incorrecto, mientras que GraphicsDevice.getDisplayMode() devuelve el bueno. Por otro lado, el GraphicsDevice.getDisplayMode() parece tener un peso pesado, por lo que realizarlo en cada par de segundos podría no ser la mejor idea. Puede que tenga que elegir una llamada nativa en su lugar. –