Java/Swing FAQ: How do I center a JDialog?
Answer: The answer here really depends on what you mean by "center". If you really want to center a JDialog on screen, you can use code like this:
// center a jdialog on screen JDialog d = new JDialog(); d.setSize(400, 300); d.setLocationRelativeTo(null); d.setVisible(true);
By calling setLocationRelativeTo with null, the JDialog will be centered.
JDialog position relative to a JFrame
While that shows how you can center a JDialog, I think what you usually want to do is to positive your JDialog properly relative to a JFrame. To do that, you'll use code that looks like this:
// create your jdialog JDialog d = new JDialog(); // tell the jvm you want to position the dialog relative // to an exististing jframe d.setLocationRelativeTo(myJFrame); // display the jdialog d.setVisible(true);
This doesn't exactly center the JDialog, but it does set the JDialog in a position to the JFrame. For more information on what this does, see the Javadoc for the setLocationRelativeTo method.
A complete JDialog center example
I usually like to share complete source code examples, so to that end, here's a complete Java class that shows how to display a JDialog relative to a JFrame.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JDialogCenterExample
{
static JFrame frame;
public static void main(String[] args)
{
// schedule this for the event dispatch thread (edt)
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
displayJFrame();
}
});
}
static void displayJFrame()
{
frame = new JFrame("Our JDialog Center Example");
// create our jbutton, then tell it what to do when
// it is pressed
JButton showDialogButton = new JButton("Show Dialog");
showDialogButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// display/center the jdialog when the button is pressed
JDialog d = new JDialog(frame, "Hello", true);
d.setLocationRelativeTo(frame);
d.setVisible(true);
}
});
// put the button on the frame
frame.getContentPane().setLayout(new FlowLayout());
frame.add(showDialogButton);
// set up the jframe, then display it
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(300, 200));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Note that if you really want your JDialog centered, just change this line of code:
d.setLocationRelativeTo(frame);
to this:
d.setLocationRelativeTo(null);

