Quel est le moyen le plus simple de centrer un java.awt.Window
comme un JFrame
ou un JDialog
?
Comme @kleopatra l'a dit dans une autre réponse, setLocationRelativeTo(null) doit être appelé après pack() pour que cela fonctionne.
Quel est le moyen le plus simple de centrer un java.awt.Window
comme un JFrame
ou un JDialog
?
Desde ce lien
Si vous utilisez Java 1.4 ou plus récent, vous pouvez utiliser la méthode simple setLocationRelativeTo(null) sur la boîte de dialogue, le cadre ou la fenêtre boîte de dialogue, le cadre ou la fenêtre pour la fenêtre.
Comme @kleopatra l'a dit dans une autre réponse, setLocationRelativeTo(null) doit être appelé après pack() pour que cela fonctionne.
Comme expliqué ci-dessous, setLocationRelativeTo(null) doit être appelé après tout appel de pack() ou setSize().
@Eusebius Bizarre, j'ai suivi un tutoriel qui me l'a fait régler avant pack()
et cela a placé le coin supérieur gauche du cadre au centre de mon écran. Après avoir déplacé la ligne vers le bas pack()
il a été correctement centré.
Cela devrait fonctionner dans toutes les versions de Java
public static void centreWindow(Window frame) {
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
frame.setLocation(x, y);
}
Notez que les techniques setLocationRelativeTo(null) et Tookit.getDefaultToolkit().getScreenSize() ne fonctionnent que pour le moniteur principal. Si vous êtes dans un environnement multi-moniteur, vous devrez peut-être obtenir des informations sur le moniteur spécifique sur lequel se trouve la fenêtre avant d'effectuer ce type de calcul.
Parfois important, parfois non...
Ver javadocs de GraphicsEnvironment pour plus d'informations sur la façon de l'obtenir.
Sous Linux, le code
setLocationRelativeTo(null)
Placer ma fenêtre à un endroit aléatoire à chaque fois que je la lance, dans un environnement à écrans multiples. Et le code
setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getSize().width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - getSize().height) / 2);
"couper" la fenêtre en deux en la plaçant au centre exact, qui se trouve entre mes deux écrans. J'ai utilisé la méthode suivante pour la centrer :
private void setWindowPosition(JFrame window, int screen)
{
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] allDevices = env.getScreenDevices();
int topLeftX, topLeftY, screenX, screenY, windowPosX, windowPosY;
if (screen < allDevices.length && screen > -1)
{
topLeftX = allDevices[screen].getDefaultConfiguration().getBounds().x;
topLeftY = allDevices[screen].getDefaultConfiguration().getBounds().y;
screenX = allDevices[screen].getDefaultConfiguration().getBounds().width;
screenY = allDevices[screen].getDefaultConfiguration().getBounds().height;
}
else
{
topLeftX = allDevices[0].getDefaultConfiguration().getBounds().x;
topLeftY = allDevices[0].getDefaultConfiguration().getBounds().y;
screenX = allDevices[0].getDefaultConfiguration().getBounds().width;
screenY = allDevices[0].getDefaultConfiguration().getBounds().height;
}
windowPosX = ((screenX - window.getWidth()) / 2) + topLeftX;
windowPosY = ((screenY - window.getHeight()) / 2) + topLeftY;
window.setLocation(windowPosX, windowPosY);
}
Fait apparaître la fenêtre au centre du premier écran. Ce n'est probablement pas la solution la plus simple.
Fonctionne correctement sur Linux, Windows et Mac.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
4 votes
Le titre devrait être "en Swing" et non "en Java", ce serait plus clair ainsi.
7 votes
@Joe
setLocation()
,setLocationRelativeTo()
ysetLocationByPlatform()
ou tout AWT, pas Swing ;)