Сцена смещена от центра после перехода с другой сцены - PullRequest
0 голосов
/ 17 ноября 2018

Я пробовал множество вещей, чтобы сделать эту сцену подходящей для сцены (как другие сцены в моем приложении), но я не могу понять это.

В настоящее время я использую кнопки и контроллеры для переключения сцен с целью сохранения формата MVC, поэтому я использую строку stage.setScene(new Scene(root pane), desired width, desired height).

Однако мерцание, возникающее при переключении сцен, разрушает целостность моего приложения.

Я пробовал другие предложения, такие как stage.centerOnScreen(), но, похоже, это смещает всю сцену из поля зрения (отсекает половину сцены), я также пробовал stage.sizeToScreen(), однако, похоже, это не имеет значения.

В идеале я хотел бы использовать stage.getScene().setRoot(pane), но сцена, кажется, меняет размер или создает белую рамку вместо изменения размера сцены, чтобы соответствовать сцене (как показано).

Если я до сих пор не прояснил себя, я пытаюсь привести сцену в соответствие со сценой. Корневая панель сцены имеет желаемый размер, если она установлена ​​в качестве корневой, но по какой-то причине сцена меняет размер.

Вот как я бы хотел, чтобы сцена подходила к сцене (это сцена 1)

enter image description here

но это то, что происходит, когда я меняю корень сцены на следующую страницу.

enter image description here

Итак, в идеале я ищу способ использовать setRoot(pane), чтобы сцена соответствовала сцене или использовать setScene(scene) без мерцания.

Примеры кода:

В одном из моих контроллеров у меня есть это (работает как задумано):

public void handle(MouseEvent event) {
    if (event.getSource() instanceof Button) {
        Button sourceButton = (Button)event.getSource();
        Stage primaryStage = (Stage ((Node)event.getSource()).getScene().getWindow();

        if (sourceButton.getId().equals("back-button")) {
            primaryStage.getScene().setRoot(view.getWelcomePane());
        }
    }
}

На виде:

public Pane getWelcomePane() {
    return new BorderPane(bpWelcomeMain); // bpWelcomeMain is the border pane that contains all the page components
}

В другом контроллере, когда появляется, как я хочу, я должен использовать это (но это производит мерцание):

public void handle(MouseEvent event) {

    if (event.getSource() instanceof Button) {

        Button clickedButton = (Button)event.getSource();
        Stage primaryStage = (Stage)((Node)event.getSource()).getScene().getWindow();

        if (clickedButton.getId().equals("create-button")) {
            primaryStage.setScene(view.getCreateScene());
        }
}

На виде:

public Scene getCreateScene() {
    return new Scene(bpCreateMain, 1500, 750); // bpCreateMain is the border pane that contains all the page components
}

Однако я бы хотел использовать .setRoot () вместо setScene (), как показано в первом примере, чтобы убрать мерцание, но также нужно, чтобы он отображался как задумано (поэтому я хотел бы использовать свой метод getCreatePane () в это представление - подобно getWelcomePane () вместо getCreateScne ()), методы практически одинаковы, поэтому я не уверен, почему он не работает.

...