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