Per calcolare la dimensione del display, è possibile utilizzare (tratto da 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());
}
}
È quindi possibile interrogare il width
e height
di virtualBounds
.
Ciò funzionerà anche in configurazioni multi-monitor.
Per quanto ne so, non esiste un metodo supportato da JDK per rilevare le modifiche, quindi il polling è l'unica scommessa, oppure utilizzare JNA e il codice nativo. Se la finestra di primo livello è ingrandita, ridimensionando il display ridimensionerai anche tutte le finestre ingrandite, così puoi anche ascoltare le modifiche. Vedi questo sun tutorial per esempi di scrittura di listener di componenti.
Se non si dispone di una finestra ingrandita di livello superiore, è possibile che si possa ottenere lo stesso effetto creando una finestra ingrandita nascosta. Non posso dire con certezza se funzionerà, ma vale la pena provarci.
Grazie per la risposta rapida. Sfortunatamente il frammento di cui sopra continua a mostrare le vecchie dimensioni (1024x768) su Ubuntu 9.04. Cordiali saluti, Marton –
Questo è strano, poiché in sostanza utilizza le stesse API della risposta accettata. – mdma
Sì, è strano, che GraphicsConfiguration.getBounds() restituisca un valore errato, mentre GraphicsDevice.getDisplayMode() restituisce quello buono. D'altra parte il GraphicsDevice.getDisplayMode() sembra essere pesante, quindi eseguirlo in ogni paio di secondi potrebbe non essere l'idea migliore. Potrei dover scegliere invece una chiamata nativa. –