将 JDialog 居中于父级之上

2022-01-24 00:00:00 user-interface layout java swing jframe

我有一个带有按钮的 Java swing 应用程序,当执行某个操作时,该按钮会生成一个弹出窗口.我想在渲染时将弹出窗口的中心点与父窗口的中心点对齐.如何计算 x,y 坐标以插入 setLocation() 的弹出窗口?

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?

只是为了澄清.我不想要 setLocationRelativeTo() 的行为,因为它将弹出窗口的左上角像素设置在父框架的中心像素之上.我想将弹出窗口的中心像素设置在父框架的中心像素上.

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.

推荐答案

setLocationRelativeTo ..这将弹出窗口的左上角像素设置在父级的中心像素之上...

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

不,它没有!

据我所知,这个简单示例弹出的 3 个对话框中的每一个似乎都居中.我只能猜测代码在错误的时间调用了 setLocationRelativeTo .

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();
        });
    }
}

相关文章