在与 JavaFX' 8 对话框相同的屏幕(监视器)上打开 JFrame
Open JFrame on same screen(monitor) as JavaFX' 8 dialog
我正在处理具有常用登录 window(JavaFX' 8 对话框)的应用程序,然后在接受它时打开新的 window (JFrame)。如果它在多显示器环境中运行,它应该可以正常工作,JFrame 将在关闭 JavaFX 8 对话框的同一台显示器上打开。
现在我可以在显示器上打开 JFrame,我可以手动选择使用
GraphicsEnvironment
,但此时我无法弄清楚 JavaFX 8 对话框是在哪个监视器上关闭的。有任何想法吗?谢谢。
也许您可以在关闭 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);
我正在处理具有常用登录 window(JavaFX' 8 对话框)的应用程序,然后在接受它时打开新的 window (JFrame)。如果它在多显示器环境中运行,它应该可以正常工作,JFrame 将在关闭 JavaFX 8 对话框的同一台显示器上打开。
现在我可以在显示器上打开 JFrame,我可以手动选择使用
GraphicsEnvironment
,但此时我无法弄清楚 JavaFX 8 对话框是在哪个监视器上关闭的。有任何想法吗?谢谢。
也许您可以在关闭 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);