Center JDialog over parent

java, jframe, layout, swing, user-interface

Solution

`setLocationRelativeTo` ..this sets the top left pixel of the popup over the center pixel of the parent. ..

No it does not!

Each of the 3 dialogs popped by this simple example appears to be centered as far as I can see. I can only guess that the code is calling `setLocationRelativeTo` at the wrong time.

import javax.swing.*;

class CenterTheDialog {

    CenterTheDialog() {
        for (int ii=1; ii<4; ii++) {
            JFrame f = new JFrame("Frame " + ii);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            f.setSize(400,300);
            f.setLocationByPlatform(true);
            f.setVisible(true);

            JDialog d = new JDialog(f);
            d.setSize(300,200);
            d.setLocationRelativeTo(f);
            d.setVisible(true);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new CenterTheDialog();
        });
    }
}

Problem

I have a Java swing application with a button that produces a popup window when a certain action is performed. I'd like to align the center point of the popup window with the center point of the parent window when it is rendered. How can I calculate the x,y coordinates to plug into `setLocation()` for the popup window? Just to clarify. I do not want the behavior of `setLocationRelativeTo()` because that sets the top-left pixel of the popup over the center pixel of the parent frame. I want to set the center pixel of the popup over the center pixel of the parent frame.

Original source