JAVAFX:当应用程序在扩展监视器上时,弹出对话框出现在主监视器上
JAVAFX: Popup dialog appearing on primary monitor when application is on extended monitor
JAVAFX:我有一个生成模态弹出对话框的应用程序,它是我在舞台上创建的,并将我的应用程序舞台作为新弹出舞台的所有者。当我 运行 应用程序并将其移动到我的扩展监视器时,弹出窗口仍然出现在我的主监视器上。
这是我的代码片段:
BorderPane borderPane = new BorderPane();
Scene currentScene=new Scene(borderPane,1015,175);
Stage popoverStage= new Stage();
popoverStage.initModality(modality);
popoverStage.alwaysOnTopProperty();
popoverStage.initStyle(StageStyle.TRANSPARENT);
popoverStage.initOwner(control.getParent().getScene().getWindow());
Bounds currentMouseLocation=control.localToScene(control.getBoundsInLocal());
double popOverX=(currentMouseLocation.getMinX()+currentMouseLocation.getMaxX())/2;
double popOverY=(currentMouseLocation.getMinY()+currentMouseLocation.getMaxY())/2;
popoverStage.setX(popOverX);
popoverStage.setY(popOverY);
popoverStage.setScene(currentScene);
popoverStage.show();
Stage
的 setX()
和 setY()
方法需要在 screen 坐标系中指定的坐标。您正在从当前 scene 坐标系传递坐标。
替换
Bounds currentMouseLocation=control.localToScene(control.getBoundsInLocal());
和
Bounds currentMouseLocation=control.localToScreen(control.getBoundsInLocal());
JAVAFX:我有一个生成模态弹出对话框的应用程序,它是我在舞台上创建的,并将我的应用程序舞台作为新弹出舞台的所有者。当我 运行 应用程序并将其移动到我的扩展监视器时,弹出窗口仍然出现在我的主监视器上。
这是我的代码片段:
BorderPane borderPane = new BorderPane();
Scene currentScene=new Scene(borderPane,1015,175);
Stage popoverStage= new Stage();
popoverStage.initModality(modality);
popoverStage.alwaysOnTopProperty();
popoverStage.initStyle(StageStyle.TRANSPARENT);
popoverStage.initOwner(control.getParent().getScene().getWindow());
Bounds currentMouseLocation=control.localToScene(control.getBoundsInLocal());
double popOverX=(currentMouseLocation.getMinX()+currentMouseLocation.getMaxX())/2;
double popOverY=(currentMouseLocation.getMinY()+currentMouseLocation.getMaxY())/2;
popoverStage.setX(popOverX);
popoverStage.setY(popOverY);
popoverStage.setScene(currentScene);
popoverStage.show();
Stage
的 setX()
和 setY()
方法需要在 screen 坐标系中指定的坐标。您正在从当前 scene 坐标系传递坐标。
替换
Bounds currentMouseLocation=control.localToScene(control.getBoundsInLocal());
和
Bounds currentMouseLocation=control.localToScreen(control.getBoundsInLocal());