How do I center a JDialog on screen?

前端 未结 5 1666
野趣味
野趣味 2020-12-07 19:38

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

相关标签:
5条回答
  • 2020-12-07 20:18

    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);
    
    0 讨论(0)
  • 2020-12-07 20:19

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

    0 讨论(0)
  • 2020-12-07 20:21

    Use this line after the pack() method:

    setLocation((Toolkit.getDefaultToolkit().getScreenSize().width)/2 - getWidth()/2, (Toolkit.getDefaultToolkit().getScreenSize().height)/2 - getHeight()/2);
    
    0 讨论(0)
  • 2020-12-07 20:24

    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);
    }
    
    0 讨论(0)
  • 2020-12-07 20:35

    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 讨论(0)
提交回复
热议问题