Передача метки в виде строки в запрос через scenes JavaFX

#javafx #parameter-passing

#javafx #передача параметров

Вопрос:

В моей первой сцене пользователь выбирает команду из таблицы, а в следующей — информация об этой команде. Однако моя проблема заключается в передаче строки (сохраненной в виде метки) в следующую сцену, которая показывает результаты выбранных команд.

 public void goResults(ActionEvent event) throws IOException{

    FXMLLoader loader = new FXMLLoader();
     loader.setLocation(getClass().getResource("TeamResults.fxml"));

     Parent tableViewParent = (Parent)loader.load();

     Scene tableViewScene = new Scene(tableViewParent);

   //access controller and call method
     TeamResultsController controller = loader.getController();
     controller.initData(teamLabel.getText());
  

Это я передаю название команды (teamLabel) из сцены 2 в сцену 3, когда выбрана кнопка результатов.

 private String team;

    public void initData(String teamName) {
         this.team = teamName;
  

Это функция, в которую я передаю значение метки и устанавливаю его в string team.

Однако, если я попытаюсь напечатать переменную team вне этой функции, ей будет присвоено значение null. Как мне заставить его хранить значение вне initData?

Например:

 public void initialize(URL url, ResourceBundle rb) {

        try {
            Connection con = DBConnector.connect();
             ResultSet rs = con.createStatement().executeQuery("SELECT DISTINCT t1.title AS title, t2.title AS title2, g.score1, g.score2 FROM games g INNER JOIN teams AS t1 ON g.team1_id = t1.id INNER JOIN teams AS t2 ON g.team2_id = t2.id WHERE g.team1_id =" team  "OR g.team2_id =" team "");
            while(rs.next()){
                reslist.add(new TeamResultsTable(rs.getString("title"), rs.getString("title2"), rs.getInt("score1"), rs.getInt("score2")));
            }

        } catch (SQLException ex) {
            Logger.getLogger(TableController.class.getName()).log(Level.SEVERE, null, ex);
        }

         title.setCellValueFactory(new PropertyValueFactory<TeamResultsTable, String>("title"));
        title2.setCellValueFactory(new PropertyValueFactory<TeamResultsTable, String>("title2"));
        score1.setCellValueFactory(new PropertyValueFactory<TeamResultsTable, Integer>("score1"));
        score2.setCellValueFactory(new PropertyValueFactory<TeamResultsTable, Integer>("score2"));

        gameTable.setItems(reslist);
  

Я пытаюсь передать ее в этот запрос (пока не беспокойтесь о подготовленном операторе).

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

Однако любая помощь будет отличной, спасибо.

Ответ №1:

вы не можете использовать значение at, initialize потому что initialize вызывается в loader.load() , и в этот раз это действительно null значение. вы можете выполнить запрос после controller.initData(teamLabel.getText()); вызова get в новой функции (и вызвать эту функцию) или даже внутри initData

другой не рекомендуемый вариант — передавать контроллер в качестве объекта загрузчику (и помещать все необходимые значения перед загрузкой), но если вы сделаете это, у вас возникнут проблемы с определением контроллера в файле fxml