Я пробовал множество вещей, чтобы сделать эту сцену подходящей для сцены (как другие сцены в моем приложении), но я не могу понять это.
В настоящее время я использую кнопки и контроллеры для переключения сцен с целью сохранения формата MVC, поэтому я использую строку stage.setScene(new Scene(root pane), desired width, desired height)
.
Однако мерцание, возникающее при переключении сцен, разрушает целостность моего приложения.
Я пробовал другие предложения, такие как stage.centerOnScreen()
, но, похоже, это смещает всю сцену из поля зрения (отсекает половину сцены), я также пробовал stage.sizeToScreen()
, однако, похоже, это не имеет значения.
В идеале я хотел бы использовать stage.getScene().setRoot(pane)
, но сцена, кажется, меняет размер или создает белую рамку вместо изменения размера сцены, чтобы соответствовать сцене (как показано).
Если я до сих пор не прояснил себя, я пытаюсь привести сцену в соответствие со сценой. Корневая панель сцены имеет желаемый размер, если она установлена в качестве корневой, но по какой-то причине сцена меняет размер.
Вот как я бы хотел, чтобы сцена подходила к сцене (это сцена 1)
но это то, что происходит, когда я меняю корень сцены на следующую страницу.
Итак, в идеале я ищу способ использовать 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 ()), методы практически одинаковы, поэтому я не уверен, почему он не работает.