2010-06-21 4 views
17

Ich entwickle eine Java Swing-Anwendung. Wie kann ich es so machen, dass wenn das Programm selbst und andere geöffnete Fenster in der Mitte des Bildschirms erscheinen?Center Swing Windows

Antwort

47
frame.setLocationRelativeTo(null); 
+0

Funktioniert das auch auf älteren Java-Versionen? Ich bin überrascht, weil ich vor einiger Zeit herausgefunden habe, dass die einzige Möglichkeit, das zu tun, "von Hand" war, wie hier erklärt: http://www.java2s.com/Code/Java/Swing-JFC/Howtocenteraframeordialog.htm –

+1

ist gültig ab 1.4, aber Sie müssen sicherstellen, dass Sie den Bildschirm zuerst richtig verpacken oder anderweitig auf die richtige Größe einstellen. – Yishai

+2

Nicht wirklich offensichtlich, wenn Sie es nicht wissen, aber das Verhalten von [setLocationRelativeTo()] (http://tinyurl.com/34syhcj), mit einer Null, ist in der Tat das Fenster zu zentrieren, wie im Javadoc beschrieben. – Gnoupi

1

Sie müssen es von Hand tun, mit setLocation(x,y).

Etwas wie:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
frame.setLocation((dim.width-frameWidth)/2, (dim.height-frameHeight)/2); 

sollte es tun (nicht getestet).

1

es von Hand in Multi-Screen-Umgebung tun so etwas wie dieses gibt (statisch ‚, weil Sie es wahrscheinlich in einer Utility-Klasse wollen würde):

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); 

} 

Wie für Standard-Schaltfläche, dann ist es JDialog.getRootPane().setDefaultButton(btn), aber Taste muss dem Dialog bereits hinzugefügt und sichtbar sein.

+0

Ich arbeite hier mit zwei Displays. Einer ist sogar vertikal verschoben. Camickr/Rehans antwortet funktioniert für mich. Es zentriert das Fenster auf dem ersten Bildschirm. Ist es nicht das, was deine Methode zu erreichen versucht? Oder verpasse ich hier etwas? Vielen Dank! – Riscie

+0

@Riscie nicht wirklich. Meine Methode versucht herauszufinden, auf welchem ​​Bildschirm Ihre Komponente angezeigt wird, sodass Sie sie auf diesem Bildschirm zentrieren können, nicht nur auf der ersten. – Taisin

+0

danke für die Klärung! Nun, das ist ziemlich wichtig! Schade, dass dies nicht standardmäßig angeboten wird! – Riscie

4

frame.setLocationRelativeTo (null); machen den Rahmen offen in Cetner

Grüße, Rehan Farooq

+0

hat für mich gearbeitet! Vielen Dank! – StiGMaT

3

Es ist einfach, wenn Sie Netbeans verwenden. Im Eigenschaftenfenster von JFrame gehen Sie zu "Code" Registerkarte. Es gibt eine Option als "Generiere Mitte" .Überprüfen Sie diese Option. JFrame wird in der Mitte angezeigt.

Verwandte Themen