如何将 JavaFX-Alert 设置到实际监视器的中间?
How to set JavaFX-Alert into middle of actual monitor?
我在 class 中有一个静态方法,但对应用程序、场景或阶段一无所知。但是我想在实际使用的显示器中间显示一个警报。
例如:我的工具在右边的屏幕上。我也想在那里而不是在主屏幕上看到警报。
我的方法:
private static Alert createAlert(AlertType type, String title, String header, String content) {
Alert alert = new Alert(type);
alert.setTitle(title);
if (!header.isEmpty()) {
alert.setHeaderText(header);
}
alert.setContentText(content);
alert.setResizable(true);
alert.setX(0); // set this into the middle of used monitor
alert.setY(0); //
return alert;
}
我怎样才能得到实际的舞台、场景或其他任何东西来获得它的 x 和 y 位置,并使用这些信息来设置警报的 x 和 y?
假设您有对当前 window 的引用,您可以找到包含它的屏幕(例如包含它的中心点):
Window currentWindow = ... ;
Point2D windowCenter = new Point2D(currentWindow.getX() + currentWindow.getWidth()/2,
currentWindow.getY() + currentWindow.getHeight()/2);
Screen currentScreen = Screen.getScreens().stream()
.filter(screen -> screen.getBounds().contains(windowCenter))
.findAny().get();
然后你可以做
Rectangle2D screenBounds = currentScreen.getBounds();
double screenCenterX = screenBounds.getMinX() + screenBounds.getWidth()/2 ;
double screenCenterY = screenBounds.getMinY() + screenBounds.getHeight()/2 ;
并相应地定位 Alert
...
虽然你需要知道当前的 window;没有这些信息就不可能做到这一点。例如,您的应用程序可能在不同屏幕上有多个 windows; "current screen" 的概念在这种情况下根本没有明确定义。
我在 class 中有一个静态方法,但对应用程序、场景或阶段一无所知。但是我想在实际使用的显示器中间显示一个警报。
例如:我的工具在右边的屏幕上。我也想在那里而不是在主屏幕上看到警报。
我的方法:
private static Alert createAlert(AlertType type, String title, String header, String content) {
Alert alert = new Alert(type);
alert.setTitle(title);
if (!header.isEmpty()) {
alert.setHeaderText(header);
}
alert.setContentText(content);
alert.setResizable(true);
alert.setX(0); // set this into the middle of used monitor
alert.setY(0); //
return alert;
}
我怎样才能得到实际的舞台、场景或其他任何东西来获得它的 x 和 y 位置,并使用这些信息来设置警报的 x 和 y?
假设您有对当前 window 的引用,您可以找到包含它的屏幕(例如包含它的中心点):
Window currentWindow = ... ;
Point2D windowCenter = new Point2D(currentWindow.getX() + currentWindow.getWidth()/2,
currentWindow.getY() + currentWindow.getHeight()/2);
Screen currentScreen = Screen.getScreens().stream()
.filter(screen -> screen.getBounds().contains(windowCenter))
.findAny().get();
然后你可以做
Rectangle2D screenBounds = currentScreen.getBounds();
double screenCenterX = screenBounds.getMinX() + screenBounds.getWidth()/2 ;
double screenCenterY = screenBounds.getMinY() + screenBounds.getHeight()/2 ;
并相应地定位 Alert
...
虽然你需要知道当前的 window;没有这些信息就不可能做到这一点。例如,您的应用程序可能在不同屏幕上有多个 windows; "current screen" 的概念在这种情况下根本没有明确定义。