在与所需位置的JFrame父级相同的屏幕中显示JDialog

时间:2015-11-14 21:13:33

标签: java swing jframe jdialog multiple-monitors

我尝试在用户点击JFrame的位置添加JDialog。如果我只使用一个屏幕,则以下JDialog代码可以工作:

public class PopupCanevas extends JDialog {

    public PopupCanevas(JFrame frame, Point position) {
        super(frame);
        this.setLocation(position);
    }
}

但是,如果我使用双显示器配置,我无法在屏幕上显示我的框架在用户点击位置的对话框。上面的代码将在所需的位置显示对话框,但在我的主屏幕上,无论我的框架位于什么屏幕。我尝试了以下方法:

this.setLocation(frame.getLocation(position));

它会在正确的屏幕上显示对话框,但是在左上角而不是在所需的位置。

如何获得所需的行为?

1 个答案:

答案 0 :(得分:2)

您需要将鼠标点(从MouseEvent)转换为屏幕坐标,例如MouseEvent#getLocationOnScreen应该有效。

如果您想围绕该点居中对话,请确保在使用pack / size

之前在对话框中使用preferredSize