Я пытаюсь выяснить, как выйти из primaryStage в javafx при открытии другого этапа при нажатии кнопки, каков код для удаления основного этапа?Как выйти из primaryStage при открытии нового этапа в javafx
ответ
Код для удаления этапа является:
stage.close();
с переменной стадии, соответствующей стадии вы хотите выйти
Вы можете использовать либо
primaryStage.close();
или
primaryStage.hide();
Согласно documentation, они полностью эквивалентны. Можно утверждать, что, поскольку hide()
определен в суперклассе, он является более общим и, следовательно, немного предпочтительным. Например, если у вас нет ссылки на primaryStage
непосредственно, но в какой-то узел, который отображается в нем, вы можете сделать
someNode.getScene().getWindow().hide();
но используя close()
таким образом требует бросок.
Один «gotcha»: по умолчанию, когда последнее окно отображается закрыто, приложение завершает работу. Так что если вы
primaryStage.close();
Stage newStage = new Stage();
Scene newScene = new Scene(...);
newStage.setScene(newScene);
newStage.show();
плохое может случиться, потому что вы могли косвенно выйти из приложения перед тем, как показал новый этап (!). Вы можете изменить поведение по умолчанию здесь с
Platform.setImplicitExit(false);
или, конечно, изменить порядок код так, что новый этап открывается перед существующим один закрыт.
набор FX: идентификатор на кнопке
<JFXButton fx:id="btn_login" prefHeight="41.0" prefWidth="242.0" style="-fx-background-color: #0098DA;" text="Login" textFill="WHITE" GridPane.columnIndex="1" GridPane.rowIndex="4">
в контроллере Java
Stage stage = (Stage) btn_login.getScene().getWindow();
ActionEvent
private void act_login(ActionEvent event) { //login pressed
stage.close();
Stage primaryStage = new Stage();
Parent root = null;
try {
root = FXMLLoader.load(getClass().getResource("../fxmlFile/main.fxml"));
} catch (IOException e) {
e.printStackTrace();
}
primaryStage.setTitle("Main Aplikasi Keuangan");
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.show();
}
Просто используйте stage.close или то, что вы можете сделать, это просто изменить сцены на той же стадии. –
Используйте stage.close(); –