12

有人可以显示简单的 Java Swing 代码/Web 资源,当单击 JFrame 的按钮时,它将弹出对话框中心对齐地放置在现有 JFrame 窗口的顶部?

4

4 回答 4

27

哦..这很简单:

假设您有一个包含 JDialog 的 JFrame,并且您希望 JDialog(打开时)位于 JFrame 之上。

所以在 JDialog 构造函数中,你应该有类似的东西:

public class MyDialog extends JDialog 
public MyDialog(JFrame parent) 
{
    super.setLocationRelativeTo(parent); // this will do the job
}

换句话说,将 JFrame 指针传递给您的对话框,然后调用 setLocationRelativeTo(...); 方法。

于 2009-11-04T23:38:18.923 回答
4

我通常调用以下方法:

dialog.setLocationRelativeTo(parent);

链接到 Javadocs

于 2009-11-04T23:40:26.753 回答
3

你在说什么样的弹出对话框?如果您使用的是 JOptionPane 或类似的东西,请将其父组件设置为 JFrame,它将自动居中于 JFrame 窗口的顶部。

JOptionPane.showMessageDialog(frame, "Hello, World!");

如果您正在创建自己的 JDialog,则可以使用 JFrame.getLocation() 获取 JFrame 的位置,使用 JFrame.getSize() 获取其大小。从那里开始,数学非常简单;只需计算 JFrame 的中心并减去 JDialog 的一半宽度/高度即可获得对话框的左上角。

如果您的 JDialog 尚未呈现,则 JFrame.getSize() 可能会给您一个零大小。在这种情况下,您可以使用 JDialog.getPreferredSize() 来确定它在屏幕上呈现后的大小。

于 2009-11-04T23:35:51.193 回答
0

如果您想在窗口上显示模态且居中的对话框...

在对话框的构造函数中:

class CustomDialog extends JDialog {
    public CustomDialog(Frame owner, String title, boolean modal) {
        super(owner, title, modal);
        setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);

        ...

        setSize(150, 100);
        setLocationRelativeTo(owner);
    }
}

要显示对话框(使用按钮等):

public void actionPerformed(ActionEvent e) {
    dialog.setVisible(true);
}
于 2015-02-07T13:34:12.373 回答