如何在屏幕上居中显示一个JDialog?

我如何去定位一个JDialog在屏幕的中心?

在Java 1.4中,你可以这样做:

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

或者(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); 

两个助手用于在屏幕内或父内部进行居中。

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

这里是我的解决scheme来检索多个显示器的屏幕尺寸。

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

pack()方法之后使用这一行:

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

AFAIK您可以将GraphicEnvironment传递给每个JDialog / JFrame / JWindow构造函数。 该对象描述要使用的监视器。