How do I go about positioning a JDialog at the center of the screen?
+10
A:
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);
johnstok
2008-10-17 18:27:27
what exactly is happening when you setlocation relative to null?
marked
2009-08-19 13:30:14
A:
Adding to the question - how would you do it when using multiple monitors?
Ran Biron
2008-10-17 21:14:35
I was having trouble with this too. I wanted to position a dialog in the center of the parent window while using multiple monitors. When the dialog was shown, I guess it would think that the parent window was off screen, because the dialog would incorrectly appear in the other monitor. But the next day, this just stopped happening and I don't know why. But a suggestion: In the JDialog constructor, you could try setting the GraphicsConfiguration parameter to that of the parent window: `new JDialog(parent, "title", modality, parent.getGraphicsConfiguration());`
Michael Angstadt
2010-08-28 17:32:50
+2
A:
AFAIK you can pass a GraphicEnvironment to each JDialog/JFrame/JWindow constructor. This object describes the monitor to use.
ZeissS
2008-10-18 22:02:59
+1
A:
Hello, 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;
}
}