如何检测JavaFx应用程序窗口所在的屏幕并在那里显示对话框?

如何检测JavaFx应用程序窗口所在的屏幕并在那里显示对话框?,javafx,Javafx,我有一个JavaFx应用程序,它显示一些警报/对话框,但在多屏幕环境中,当应用程序移动到辅助屏幕时,这些警报/对话框仍然显示在主屏幕上 如何(自动)在应用程序所在的同一屏幕上显示这些(非模式)对话框?您只需设置对话框的所有者: dialog.initOwner(primaryStage) 并确保在primaryStage.show()之前不要调用它 要检测应用程序在哪个屏幕上显示,您可以使用主屏幕的边界: private boolean isOnPrimaryScreen(double x) {

我有一个JavaFx应用程序,它显示一些警报/对话框,但在多屏幕环境中,当应用程序移动到辅助屏幕时,这些警报/对话框仍然显示在主屏幕上


如何(自动)在应用程序所在的同一屏幕上显示这些(非模式)对话框?

您只需设置对话框的所有者:

dialog.initOwner(primaryStage)

并确保在
primaryStage.show()之前不要调用它

要检测应用程序在哪个屏幕上显示,您可以使用主屏幕的边界:

private boolean isOnPrimaryScreen(double x) {
    Rectangle2D bounds = Screen.getPrimary().getBounds();
    return x <= bounds.getMaxX();
}
专用布尔值isOnPrimaryScreen(双x){
矩形2D边界=Screen.getPrimary().getBounds();

返回x我的非主屏幕位于主屏幕的左侧,因此它们的边界具有负的
minX
值。其中一个屏幕上的阶段将具有负的
x
值,因此接受答案中的方法将错误地返回
true
。我使用
屏幕。getScreensForRectangle
方法。这方法可能会为任意矩形返回多个屏幕,因此当我只关心后台的左上角时,我使用如下代码:

/**
 * Returns the screen for the specified stage.
 *
 * @param stage the stage
 * @return the screen for the specified stage
 */
@Nonnull
public static Screen getScreenForStage(@Nonnull Stage stage) {
    for (Screen screen : Screen.getScreensForRectangle(stage.getX(), stage.getY(), 1., 1.)) {
        return screen;
    }
    throw new NoSuchElementException("Cannot determine screen for stage.");
}

initOwner
(和
owner
for ControlFx)正常工作,谢谢。如果两个/所有屏幕尺寸相同,您的
isOnPrimaryScreen
是否会返回假阳性?:ocaling stage.getX()当stage位于第二个屏幕上时,会将x坐标添加到主屏幕的宽度上