die Anzeigegröße zu berechnen, Sie (aus 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());
}
}
Sie können dann die width
und height
der Abfrage virtualBounds
verwenden können.
Dies funktioniert auch in Multi-Monitor-Setups.
Soweit ich weiß, gibt es keine von JDK unterstützte Methode, um Änderungen zu erkennen, also ist das Polling Ihre einzige Wette oder verwenden Sie JNA und nativen Code. Wenn das Fenster der obersten Ebene maximiert ist, ändert die Größenänderung der Anzeige auch die Größe aller maximierten Fenster, so dass Sie auch dort auf Änderungen achten können. Beispiele für das Schreiben von Komponenten-Listenern finden Sie unter sun tutorial.
Wenn Sie kein Maximierungsfenster auf oberster Ebene haben, können Sie möglicherweise auch denselben Effekt erzielen, indem Sie ein verborgenes maximiertes Fenster erstellen. Ich kann nicht sicher sagen, ob das funktioniert, aber es ist einen Versuch wert.
Vielen Dank für die schnelle Antwort. Leider zeigt das obige Snippet die alte Größe (1024x768) auf Ubuntu 9.04 an. Mit freundlichen Grüßen, Marton –
Das ist seltsam, da es im Wesentlichen die gleichen APIs wie die angenommene Antwort verwendet. – mdma
Ja, es ist seltsam, dass die GraphicsConfiguration.getBounds() einen falschen Wert zurückgibt, während GraphicsDevice.getDisplayMode() den guten zurückgibt. Auf der anderen Seite scheint der GraphicsDevice.getDisplayMode() zu Schwergewicht zu sein, so dass es in einigen paar Sekunden nicht die beste Idee ist. Möglicherweise muss ich stattdessen einen nativen Anruf wählen. –