Je développe une application Java Swing. Comment puis-je faire en sorte que lorsque le programme lui-même et toutes les autres fenêtres s'ouvrent ils apparaissent au centre de l'écran?Centre Swing Windows
Répondre
frame.setLocationRelativeTo(null);
Vous devrez le faire manuellement, en utilisant setLocation(x,y)
.
Quelque chose comme:
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((dim.width-frameWidth)/2, (dim.height-frameHeight)/2);
devrait le faire (non testé).
Faire la main dans un environnement multi-écran donne quelque chose comme ça (statique, parce que vous ne voudriez probablement dans une classe utilitaire):
public static Rectangle getScreenBounds(Component top){
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gd = ge.getScreenDevices();
if (top != null){
Rectangle bounds = top.getBounds();
int centerX = (int) bounds.getCenterX();
int centerY = (int) bounds.getCenterY();
for (GraphicsDevice device : gd){
GraphicsConfiguration gc = device.getDefaultConfiguration();
Rectangle r = gc.getBounds();
if (r.contains(centerX, centerY)){
return r;
}
}
}
return gd[0].getDefaultConfiguration().getBounds();
}
public void centerWindowOnScreen(Window windowToCenter){
Rectangle bounds = getScreenBounds(windowToCenter);
Point newPt = new Point(bounds.x + bounds.width/2, bounds.y + bounds.height/2);
Dimension componentSize = windowToCenter.getSize();
newPt.x -= componentSize.width/2;
newPt.y -= componentSize.height/2;
windowToCenter.setLocation(newPt);
}
Comme pour le bouton par défaut, il est JDialog.getRootPane().setDefaultButton(btn)
, mais le bouton doit être déjà ajouté à la boîte de dialogue et visible.
Je travaille avec deux écrans ici. On est même décalé verticalement. Les réponses de camking/Rehans fonctionnent pour moi. Il centre la fenêtre sur le premier écran. N'est-ce pas ce que votre méthode essaie d'accomplir? Ou est-ce que je manque quelque chose ici? Merci! – Riscie
@Riscie pas vraiment. Ma méthode essaye de trouver sur quel écran votre composant est montré, ainsi vous pouvez le centrer sur cet écran, pas seulement sur le premier. – Taisin
merci pour la clarification! Eh bien c'est vraiment besoin! Dommage que ce n'est pas proposé par défaut! – Riscie
frame.setLocationRelativeTo (null); rendre le cadre ouvert dans Cetner
Cordialement, Rehan Farooq
a travaillé pour moi! Merci! – StiGMaT
Il est facile si vous utilisez Netbeans. Dans la fenêtre de propriétés de JFrame, accédez à l'onglet "Code". Il existe une option "Générer le centre" .Cochez cette option. JFrame s'affichera au centre.
Est-ce que cela fonctionne également sur les anciennes versions de Java? Je suis surpris parce que tout à l'heure j'ai compris que la seule façon de le faire était "à la main", comme expliqué ici: http://www.java2s.com/Code/Java/Swing-JFC/Howtocenteraframeordialog.htm –
est valide à partir de la version 1.4, mais vous devez vous assurer que vous empaquetez ou taillez l'écran correctement en premier. – Yishai
Pas vraiment évident quand vous ne le connaissez pas, mais le comportement de [setLocationRelativeTo()] (http://tinyurl.com/34syhcj), avec une valeur nulle, est en effet de centrer la fenêtre, comme décrit dans le javadoc. – Gnoupi