在同一屏幕中的所需位置显示 JDialog 及其 JFrame 父级

Show JDialog in the same screen as its JFrame parent at the desired location

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

public class PopupCanevas extends JDialog {

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

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

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

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

如何获得所需的行为?

您需要将鼠标点(从 MouseEvent)转换为屏幕坐标,MouseEvent#getLocationOnScreen 应该可以。

如果要使对话框围绕该点居中,请确保在使用其 size/preferredSize

之前在对话框上使用 pack