2010-06-21 4 views
17

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

47
frame.setLocationRelativeTo(null); 
+0

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 –

+1

est valide à partir de la version 1.4, mais vous devez vous assurer que vous empaquetez ou taillez l'écran correctement en premier. – Yishai

+2

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

1

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é).

1

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.

+0

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

+0

@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

+0

merci pour la clarification! Eh bien c'est vraiment besoin! Dommage que ce n'est pas proposé par défaut! – Riscie

4

frame.setLocationRelativeTo (null); rendre le cadre ouvert dans Cetner

Cordialement, Rehan Farooq

+0

a travaillé pour moi! Merci! – StiGMaT

3

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.