ejemplo centrar java swing

centrar - joptionpane java



¿Cómo centro un JDialog en la pantalla? (5)

AFAIK puede pasar un GraphicEnvironment a cada constructor de JDialog / JFrame / JWindow. Este objeto describe el monitor a usar.

¿Cómo hago para colocar un JDialog en el centro de la pantalla?


Dos ayudantes para centrar dentro de la pantalla o dentro del padre.

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


Use esta línea después del método pack() :

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


esta es mi solución para recuperar la dimensión de la pantalla con múltiples monitores.

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


En Java 1.4+ puedes hacer:

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

O tal vez (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);