Передача метки в виде строки в запрос через сцены JavaFX - PullRequest
0 голосов
/ 28 марта 2019

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

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 внеэта функция, его значение равно нулю.Как заставить его хранить значение вне 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 Ответ

0 голосов
/ 28 марта 2019

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

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

...