Java Swing:在现有窗口之上定位对话框

时间:2009-11-04 23:09:05

标签: java swing jdialog

有人可以显示简单的Java Swing代码/网络资源,当点击JFrame的按钮时,它会将弹出对话框定位在现有JFrame窗口的顶部吗?

4 个答案:

答案 0 :(得分: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(...);方法

答案 1 :(得分:4)

我通常会调用以下方法:

dialog.setLocationRelativeTo(parent);

Link to Javadocs

答案 2 :(得分:3)

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

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

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

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

答案 3 :(得分: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);
}