在同一屏幕中的所需位置显示 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
我正在尝试在用户单击 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