Ошибка при попытке передать переменную другому контроллеру в javafx / scenebuilder - PullRequest
0 голосов
/ 17 октября 2018

Я делаю простую программу, в которой я пытаюсь добавить строку из TextField в ListView в другой сцене.Проблема в том, что я получаю исключение NullPointerException, когда я передаю строку в метод, который добавит ее в список.

Вот код для контроллера основной сцены:

import java.io.IOException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class MainPageController {

@FXML TextField txtfield;

public void addButton(ActionEvent event) {

    String a=txtfield.getText();
    FXMLLoader loader= new FXMLLoader();
    loader.setLocation(getClass().getResource("/progra/view/ListView.fxml"));
    ListController obj=loader.getController();
    obj.addList(a);// <----NullPointerException

}

public void openList(ActionEvent event) throws IOException {

    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/program /view/ListView.fxml"));
    Parent root1 = (Parent) fxmlLoader.load();
    Stage stage = new Stage();
    stage.setScene(new Scene(root1));  
    stage.show();

}
}

Вот код для контроллера списка:

import javafx.fxml.FXML;
import javafx.scene.control.ListView;

public class ListController{

@FXML
ListView<String> listofstrs;

public void addList(String a) {

    listofstrs.getItems().add(a);

}
}

Что мне делатьнужно сделать, чтобы это исправить?Если я могу добавить, возможно ли добавить переменные в ListView (или любые другие текстовые контейнеры) на другой стадии / сцене, не открывая сцену / сцену, где она содержится, и когда вы откроете ее, вы увидите то, что вы добавили?Если да, что мне нужно добавить?

1 Ответ

0 голосов
/ 17 октября 2018

Поскольку вы вызываете метод getController(), а контроллер не установлен в исходном коде Java, вы должны определить контроллер в своем файле fxml.Можете ли вы опубликовать исходный текст fxml?

В вашем fxml ваш корневой элемент должен иметь атрибут fx: controller, установленный на путь класса контроллера, например:

fx:controller="com.class.path.to.ListController

...