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

Java 如何确保应用程序窗口在启动时可见?,java,javafx,Java,Javafx,我有一个应用程序,它通常在双监视器设置上运行。我还保存窗口退出时的当前大小和位置,并在启动应用程序时再次加载 我的问题来自其中一个监视器被移除或分辨率改变的情况。如果我保存窗口的x和y位置,并且它最后一次在现在不存在的监视器上可见,那么当程序再次启动时,它将不在视图中 下面是我用来在Main.java中编辑的代码: double x = Settings.getWindowX(); double y = Settings.getWindowY(); double h = Settings.get

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

我的问题来自其中一个监视器被移除或分辨率改变的情况。如果我保存窗口的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重置为100100

我不确定从何处开始。

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

例如,要测试是否存在与配置设置中保存的边界相交的物理图形设备,可以执行以下操作:

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);

}

小挑剔:是“确保”而不是“保险”,我总是把这些弄混。谢谢你花时间指出:)已经更正了。@Travis我想这在英国英语中才是真的;在美国,英语(也)被认为是“确保”的有效替代拼写(尽管我实际上不喜欢这个意义上的“保险”)。