How do I center a JDialog on screen?

匿名 (未验证) 提交于 2019-12-03 01:55:01

问题:

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

回答1:

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


回答2:

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


回答3:

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


回答4:

Use this line after the pack() method:

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


回答5:

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



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!