繁体   English   中英

在与JavaFX'8对话框相同的屏幕(监视器)上打开JFrame

[英]Open JFrame on same screen(monitor) as JavaFX' 8 dialog

我正在使用具有通常登录窗口(JavaFX'8对话框)的应用程序,然后接受它会打开新窗口(JFrame)。 如果它在多监视器环境中运行,则应以这种方式工作,即在关闭JavaFX 8对话框的同一监视器上打开JFrame。

现在,我可以在可以使用GraphicsEnvironment手动选择的监视器上打开JFrame,但是目前我无法确定JavaFX的哪个对话框已关闭。 有任何想法吗? 谢谢。

关闭JavaFX对话框时,也许可以保存位置:

private void saveWindowPosition() {
    Preferences userPrefs = Preferences.userNodeForPackage(getClass());
    userPrefs.putDouble("stage.x", primaryStage.getX());
    userPrefs.putDouble("stage.y", primaryStage.getY());
}

并像这样读出:

private void restoreWindowPosition() {
    Preferences userPrefs = Preferences.userNodeForPackage(getClass()); 
    // get window location from user preferences: use x=100, y=100 as
    // default
    double x = userPrefs.getDouble("stage.x", 100);
    double y = userPrefs.getDouble("stage.y", 100);

    primaryStage.setX(x);
    primaryStage.setY(y);
}

好吧,这对我有用:

/**
* As an argument you pass a Scene(of Java FX 8 Dialog in my example),
* by closing it you want JFrame to open on same monitor.
**/
public static int getActiveStageLocation(Scene scene){
    List interScreens = Screen.getScreensForRectangle(scene.getWindow().getX(),
            scene.getWindow().getY(),
            scene.getWindow().getWidth(),
            scene.getWindow().getHeight());
    Screen activeScreen = (Screen) interScreens.get(0);
    Rectangle2D r = activeScreen.getBounds();
    double position = r.getMinX();
    return (int) position;
}

然后,您可以简单地设置JFrame的位置:

/**
* Some code for instantiating frame and so on....
* Parameter scene you could get for example from your FXML
**/
myFrame.setLocation(getActiveStageLocation(scene), myFrame.getY());
myFrame.setVisible(true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM