Как мне разместить JDialog в центре экрана?
85
В 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);
setLocationRelativeTo
диалоговое окно отображалось на соответствующем мониторе для пользователей с несколькими мониторами.pack()
раньше,setLocationRelativeTo(null)
чтобы правильно центрировать диалог.Два помощника для центрирования внутри экрана или внутри родителя.
// 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); }
источник
Используйте эту строку после
pack()
метода:setLocation((Toolkit.getDefaultToolkit().getScreenSize().width)/2 - getWidth()/2, (Toolkit.getDefaultToolkit().getScreenSize().height)/2 - getHeight()/2);
источник
вот мое решение для получения размера экрана с несколькими мониторами.
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; } }
источник
AFAIK вы можете передать GraphicEnvironment каждому конструктору JDialog / JFrame / JWindow. Этот объект описывает используемый монитор.
источник