Velvet Star Monitor

Standout celebrity highlights with iconic style.

updates

How do I center a JDialog on screen?

Writer Matthew Barrera

How do I go about positioning a JDialog at the center of the screen?

5 Answers

In Java 1.4+ you can do:

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

Or perhaps (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

Use this line after the pack() method:

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

Two helpers for centering within the screen or within the parent.

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

here's my solution to retrieve screen dimension with multiple monitors.

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

AFAIK you can pass a GraphicEnvironment to each JDialog/JFrame/JWindow constructor. This object describes the monitor to use.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy