2008-10-17 11 views

Antwort

137

In Java 1.4+ Sie tun können:

final JDialog d = new JDialog(); 
d.setSize(200,200); 
d.setLocationRelativeTo(null); 
d.setVisible(true); 

Oder vielleicht (pre 1.4):

final JDialog d = new JDialog(); 
d.setSize(200, 200); 
final Toolkit toolkit = Toolkit.getDefaultToolkit(); 
final Dimension screenSize = toolkit.getScreenSize(); 
final int x = (screenSize.width - d.getWidth())/2; 
final int y = (screenSize.height - d.getHeight())/2; 
d.setLocation(x, y); 
d.setVisible(true); 
+7

, was genau passiert, wenn Sie relative SetLocation auf null? –

+5

Wollte hinzufügen, dass Sie setSize() verwenden müssen, sonst funktioniert die setLocationRelativeTo() nicht. Ich musste sowohl setSize() UND setPreferredSize() verwenden, um alles richtig aussehen zu lassen. – Richard

+2

Antwort auf die Frage von @marked: Wenn die Komponente derzeit nicht angezeigt wird, oder c ist null, wird das Fenster in der Mitte des Bildschirms platziert. (aus dem java.awt.Window javadocs) –

3

AFAIK Sie eine GraphicEnvironment zu jedem JDialog/JFrame/JWindow Konstruktor übergeben kann. Dieses Objekt beschreibt den zu verwendenden Monitor.

5

Hier ist meine Lösung, Bildschirmgröße mit mehreren Monitoren zu erhalten.

import java.awt.*; 
import javax.swing.JFrame; 

/** 
* Méthodes statiques pour récupérer les informations d'un écran. 
* 
* @author Jean-Claude Stritt 
* @version 1.0/24.2.2009 
*/ 
public class ScreenInfo { 

    /** 
    * Permet de récupérer le numéro de l'écran par rapport à la fenêtre affichée. 
    * @return le numéro 1, 2, ... (ID) de l'écran 
    */ 
    public static int getScreenID(JFrame jf) { 
    int scrID = 1; 
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    GraphicsDevice[] gd = ge.getScreenDevices(); 
    for (int i = 0; i < gd.length; i++) { 
     GraphicsConfiguration gc = gd[i].getDefaultConfiguration(); 
     Rectangle r = gc.getBounds(); 
     if (r.contains(jf.getLocation())) { 
     scrID = i+1; 
     } 
    } 
    return scrID; 
    } 

    /** 
    * Permet de récupérer la dimension (largeur, hauteur) en px d'un écran spécifié. 
    * @param scrID --> le n° d'écran 
    * @return la dimension (largeur, hauteur) en pixels de l'écran spécifié 
    */ 
    public static Dimension getScreenDimension(int scrID) { 
    Dimension d = new Dimension(0, 0); 
    if (scrID > 0) { 
     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     DisplayMode mode = ge.getScreenDevices()[scrID - 1].getDisplayMode(); 
     d.setSize(mode.getWidth(), mode.getHeight()); 
    } 
    return d; 
    } 

    /** 
    * Permet de récupérer la largeur en pixels d'un écran spécifié. 
    * @param scrID --> le n° d'écran 
    * @return la largeur en px de l'écran spécifié 
    */ 
    public static int getScreenWidth(int scrID) { 
    Dimension d = getScreenDimension(scrID); 
    return d.width; 
    } 

    /** 
    * Permet de récupérer la hauteur en pixels d'un écran spécifié. 
    * @param scrID --> le n° d'écran 
    * @return la hauteur en px de l'écran spécifié 
    */ 
    public static int getScreenHeight(int scrID) { 
    Dimension d = getScreenDimension(scrID); 
    return d.height; 
    } 

} 
+0

plus eins, weil die Verwendung der Muttersprache die Codequalität erhöht. –

6

Zwei Helfer für im Bildschirm oder in der Mutter Zentrierung.

// Center on screen (absolute true/false (exact center or 25% upper left)) 
public void centerOnScreen(final Component c, final boolean absolute) { 
    final int width = c.getWidth(); 
    final int height = c.getHeight(); 
    final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    int x = (screenSize.width/2) - (width/2); 
    int y = (screenSize.height/2) - (height/2); 
    if (!absolute) { 
     x /= 2; 
     y /= 2; 
    } 
    c.setLocation(x, y); 
} 

// Center on parent (absolute true/false (exact center or 25% upper left)) 
public void centerOnParent(final Window child, final boolean absolute) { 
    child.pack(); 
    boolean useChildsOwner = child.getOwner() != null ? ((child.getOwner() instanceof JFrame) || (child.getOwner() instanceof JDialog)) : false; 
    final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    final Dimension parentSize = useChildsOwner ? child.getOwner().getSize() : screenSize ; 
    final Point parentLocationOnScreen = useChildsOwner ? child.getOwner().getLocationOnScreen() : new Point(0,0) ; 
    final Dimension childSize = child.getSize(); 
    childSize.width = Math.min(childSize.width, screenSize.width); 
    childSize.height = Math.min(childSize.height, screenSize.height); 
    child.setSize(childSize);   
    int x; 
    int y; 
    if ((child.getOwner() != null) && child.getOwner().isShowing()) { 
     x = (parentSize.width - childSize.width)/2; 
     y = (parentSize.height - childSize.height)/2; 
     x += parentLocationOnScreen.x; 
     y += parentLocationOnScreen.y; 
    } else { 
     x = (screenSize.width - childSize.width)/2; 
     y = (screenSize.height - childSize.height)/2; 
    } 
    if (!absolute) { 
     x /= 2; 
     y /= 2; 
    } 
    child.setLocation(x, y); 
} 
5

Verwenden Sie diese Zeile nach der pack() Methode:

setLocation((Toolkit.getDefaultToolkit().getScreenSize().width)/2 - getWidth()/2, (Toolkit.getDefaultToolkit().getScreenSize().height)/2 - getHeight()/2); 
Verwandte Themen