JavaFX Как разделить код в контроллере - PullRequest
0 голосов
/ 12 мая 2019

У меня проблемы с разделением бизнес-логики с одного контроллера на разные контроллеры.Проблема: В начале моего приложения я спрашиваю у пользователя имя пользователя и пароль для входа в систему. После этого, и, если вход в систему успешен, я хочу показать пользователю основную сцену, которая включает в себя некоторые основные операции, которые может выполнять мое приложение.проблема заключается в том, чтобы выполнить любую основную операцию (например, найти группы, к которым принадлежит пользователь), мне нужно знать имя пользователя, которое пользователь использовал при входе в систему. Сначала я создал один контроллер и передал ему имя пользователя из логина.scene.Here - метод входа с контроллера входа:

private void login(){

    boolean loginResult = false;

    try {
//Returns True if the user can login with the given username and password
            loginResult = userRemote.login(username_field.getText(), password_field.getText());

        if (!loginResult) {
            Alert alert = new Alert(Alert.AlertType.ERROR, "The username and/or password are incorrect");
            alert.showAndWait();
        } else {
            loadMain();
        }

    } catch (RemoteException e) {
        e.printStackTrace();
        Alert alert = new Alert(Alert.AlertType.ERROR, "Unable to connect to the server.Please try again later");
        alert.showAndWait();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

Если вход выполнен успешно, я загружаю главную сцену, передавая ему имя пользователя. Вот код:

FXMLLoader loader = new FXMLLoader(getClass().getResource("../view/fxml/main.fxml"));

        Parent root = loader.load();

        Controller controller = loader.getController();

        controller.init(username_field.getText());

        Stage stage = (Stage) ( (Node) (sign_in_btn) ).getScene().getWindow();

        Scene scene = new Scene(root);

        scene.getStylesheets().add("/gui/view/css/style.css");

        stage.setScene(scene);

В контроллере я сохраняю имя пользователя в поле, вот метод init, который называется:

void init(String username) throws IOException {
    this.username = username;
    //some other code
}

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

Я хочу спросить, есть лилюбой способ передать имя пользователя на другие контроллеры с одного контроллера?Мое приложение выполняет следующие операции: находит задачи пользователя, находит группы пользователя, создает задачи, создает группы, удаляет задачи, удаляет группы.Я использую группу переключателей, которые составляют навигационную панель: enter image description here

Поэтому, когда пользователь нажимает любую из кнопок переключения, соответствующая операция выполняется с использованием имени пользователя, которое он дал, когдаон вошел в систему. Я хочу, чтобы каждая кнопка переключения загружала одно представление fxml, и каждое из представлений имело свой собственный контроллер, который выполняет соответствующее действие, используя имя пользователя. Но я не знаю, как сохранить имя пользователя и передать егоэти контроллеры.Правильно, я знаю, что я использую один контроллер, который не использует файлы fxml, он просто создает соответствующий графический интерфейс в зависимости от нажатой кнопки переключения и выполняет бизнес-логику.

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