如何确保应用程序窗口在启动时可见?

时间:2016-12-13 04:04:39

标签: java javafx

我有一个通常在双显示器设置上运行的应用程序。我还会在退出时保存窗口的当前大小和位置,并在启动应用程序时再次加载它。

我的问题来自其中一个显示器被移除或分辨率改变的情况。如果我保存窗口的x和y位置,并且它最后在现在缺少的监视器上可见,则在程序再次启动时它将不可用。

以下是我在Main.java中使用的代码:

double x = Settings.getWindowX();
double y = Settings.getWindowY();
double h = Settings.getWindowH();
double w = Settings.getWindowW();

primaryStage.setScene(mainScene);
primaryStage.setX(x);
primaryStage.setY(y);
primaryStage.setWidth(w);
primaryStage.setHeight(h);

我的目标是检查窗口是否在可用监视器的可见边界内,如果没有,则将x,y重置为100,100。

我不知道从哪里开始。

1 个答案:

答案 0 :(得分:2)

Screen API允许您检查当前配置范围内的值。

E.g。要测试是否有物理图形设备与配置设置中保存的边界相交,您可以执行以下操作:

double x = Settings.getWindowX();
double y = Settings.getWindowY();
double h = Settings.getWindowH();
double w = Settings.getWindowW();

primaryStage.setScene(mainScene);

if (Screen.getScreensForRectangle(x, y, w, h).isEmpty()) {

    // no screen intersects saved values...
    // just center on primary screen:

    primaryStage.centerOnScreen();

} else {    

    primaryStage.setX(x);
    primaryStage.setY(y);
    primaryStage.setWidth(w);
    primaryStage.setHeight(h);

}