如何将JavaFX-Alert设置为实际监视器的中间位置?

时间:2015-05-13 12:53:00

标签: javafx alert multiple-monitors

我在类中有一个静态方法,而不了解Application,Scene oder Stage。但是我想在实际使用的显示器中间显示警报。

例如:我的工具位于右侧屏幕上。我想在那里看到警报,而不是在主屏幕上。

我的方法:

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?

1 个答案:

答案 0 :(得分:2)

假设您有对当前窗口的引用,您可以找到包含它的屏幕(例如包含其中心点):

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 ...

你需要知道当前窗口;没有这些信息就不可能做到这一点。例如,您的应用程序可能在不同的屏幕上有多个具有不同窗口的窗口;在这种情况下,“当前屏幕”的概念根本没有明确定义。