JavaFx сохраняет размер окна после изменения размера пользователя

В настоящее время я использую следующий код для переключения между сценами. Я хочу переключаться между окнами и СОХРАНЯТЬ размер окна (поэтому, когда пользователи изменяют размер окна вручную, изменяя размер окна, он останется с выбранным размером даже после смены сцены).

Scene scene = new Scene(pane); // new Scene(pane, userChosenWidth??, userChosenHeight??); stage.setScene(scene); stage.sizeToScene();

Кто-нибудь знает, как это сделать?


person Tim Joseph    schedule 12.12.2014    source источник
comment
проверить эту библиотеку, она делает все, что вы хотите сделать на сцене: github.com/Oshan96/CustomStage   -  person Oshan_Mendis    schedule 18.04.2018


Ответы (2)


Просто позвоните getWidth() и getHeight() на текущий Scene. Если у вас нет ссылки на текущую сцену, вы можете получить ее с помощью stage.getScene().

person James_D    schedule 12.12.2014

Я создал этот класс:

public class AppSize {

    private static final String HEIGHT = "Height";
    private static final String WIDTH = "Width";
    private static final String Y = "Y";
    private static final String X = "X";

    private final static Preferences prefs =  Preferences.userNodeForPackage(AppSize.class);

    public static void setSize(Stage stage) {

    Optional.ofNullable(prefs.getDouble(X, -1)).filter(x->x>=0).ifPresent(stage::setX);
    Optional.ofNullable(prefs.getDouble(Y, -1)).filter(y->y>=0).ifPresent(stage::setY);
    Optional.ofNullable(prefs.getDouble(WIDTH, -1)).filter(width->width>=0).ifPresent(stage::setWidth);
    Optional.ofNullable(prefs.getDouble(HEIGHT, -1)).filter(height->height>=0).ifPresent(stage::setHeight);

    stage.setOnCloseRequest(
            e->{

                if(stage.isFullScreen()) {
                    return;
                }

                prefs.putDouble(X, stage.getX());
                prefs.putDouble(Y, stage.getY());
                prefs.putDouble(WIDTH, stage.getWidth());
                prefs.putDouble(HEIGHT, stage.getHeight());
            });
    }
}

его использование:

 public void start(Stage stage) throws Exception {
    //...
    AppSize.setSize(stage);
    stage.show();
}
person Oleksandr Potomkin    schedule 28.01.2021