Шаблон проектирования MVC и контроллеры в JavaFX - PullRequest
1 голос
/ 15 мая 2019

Я занимаюсь разработкой программного обеспечения с использованием JavaFX.Это настольное приложение.Я новичок в MVC, а также JavaFX;Но узнать некоторые детали, прибегая к помощи.Я следую шагам здесь , чтобы узнать о JavaFX, а также MVC.Я знаю, что в MVC, Model - это POJO, View - это визуализация, и контроллер действует как на прием, так и на ввод и преобразование в команды для вида и модели.Модель также может иметь логику для обновления контроллера.У нас также для каждого представления должен быть контроллер. (view-controllers) Но у меня есть вопрос;Почему в tutorial мы создаем оба PersonEditDialog and PersonOverview stage в mainApp?Я имею в виду это:

public void showPersonOverview() {
try {
    // Load person overview.
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(MainApp.class.getResource("view/PersonOverview.fxml"));
    AnchorPane personOverview = (AnchorPane) loader.load();

    // Set person overview into the center of root layout.
    rootLayout.setCenter(personOverview);

    // Give the controller access to the main app.
    PersonOverviewController controller = loader.getController();
    controller.setMainApp(this);

} catch (IOException e) {
    e.printStackTrace();
}

}

И это:

public boolean showPersonEditDialog(Person person) {
try {
    // Load the fxml file and create a new stage for the popup dialog.
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(MainApp.class.getResource("view/PersonEditDialog.fxml"));
    AnchorPane page = (AnchorPane) loader.load();

    // Create the dialog Stage.
    Stage dialogStage = new Stage();
    dialogStage.setTitle("Edit Person");
    dialogStage.initModality(Modality.WINDOW_MODAL);
    dialogStage.initOwner(primaryStage);
    Scene scene = new Scene(page);
    dialogStage.setScene(scene);

    // Set the person into the controller.
    PersonEditDialogController controller = loader.getController();
    controller.setDialogStage(dialogStage);
    controller.setPerson(person);

    // Show the dialog and wait until the user closes it
    dialogStage.showAndWait();

    return controller.isOkClicked();
} catch (IOException e) {
    e.printStackTrace();
    return false;
}

} И те, и другие определены и созданы в классе mainApp?Почему мы не создали PersonEditDialog stage и scene в PersonOverviewController?В контроллерах мы не должны использовать новое ключевое слово?Они просто являются связующим звеном между представлением и моделью?Я спрашиваю о правилах контроллера;для мульти stage и .fxml программного обеспечения.Мое программное обеспечение включает в себя 8 различных страниц (или больше). Нужно ли создавать все этапы в mainApp?Почему бы не создать новый stage и добавить соответствующий .fxml к сцене этого этапа в предыдущем шаге приложения?

1 Ответ

0 голосов
/ 15 мая 2019

Невозможно сделать то, что вы говорите, вы не можете создать что-то из чего-то другого, чего даже не существует.Если вы не создадите экземпляр PersonOverview в Main, вы не сможете заставить его что-либо делать.Также обратите внимание, что в этом случае представление PersonOverview присоединено к RootLayout, созданному в Main.Таким образом, вы можете рассматривать их как одно главное представление, где каждый контроллер управляет одной частью представления.В случае PersonEditDialog, вы начинаете этап через главный вид, чтобы редактировать некоторую информацию.Вот почему он создан в Main.Этап прикреплен к MainStage.И если у вас есть несколько этапов для создания, вам не нужно делать это в Main.Это зависит от ваших потребностей.Вы можете запустить этап, который использует некоторый контроллер из другого контроллера, например, нажав на кнопку.Так что все зависит от того, после какого события вы хотите увидеть этот этап Пример: Вы можете добавить кнопку в контроллер PersonEditDialog, например More..., и вы определяете ее событие setOnAction, чтобы открыть новый вид (этап), на котором вы показываете картинку, ссылку Twitter ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...