Pour calculer la taille d'affichage, vous pouvez utiliser (extrait 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());
}
}
Vous pouvez ensuite interroger le width
et height
de virtualBounds
.
Cela fonctionnera également dans les configurations multi-moniteurs. Pour autant que je sache, il n'y a pas de méthode prise en charge par JDK pour détecter les changements, donc l'interrogation est votre seul pari, ou utilisez le code JNA et le code natif. Si votre fenêtre de niveau supérieur est agrandie, le redimensionnement de l'affichage redimensionnera également toutes les fenêtres agrandies, afin que vous puissiez également y écouter les modifications. Voir ce sun tutorial pour des exemples d'écriture des composants d'écoute.
Si vous ne disposez pas d'une fenêtre agrandie de niveau supérieur, vous pouvez également obtenir le même résultat en créant une fenêtre agrandie masquée. Je ne peux pas dire avec certitude si cela fonctionnera, mais cela vaut la peine d'essayer.
Merci pour votre réponse rapide. Malheureusement, l'extrait ci-dessus continue d'afficher l'ancienne taille (1024x768) sur Ubuntu 9.04. Cordialement, Marton –
C'est étrange, car il utilise essentiellement les mêmes API que la réponse acceptée. – mdma
Oui, il est étrange que GraphicsConfiguration.getBounds() renvoie une valeur incorrecte alors que GraphicsDevice.getDisplayMode() renvoie la valeur correcte. D'autre part, le GraphicsDevice.getDisplayMode() semble être un poids lourd, donc l'exécuter toutes les deux secondes peut-être pas la meilleure idée. Je pourrais avoir à choisir un appel natif à la place. –