Не могу вызвать метод из контроллера

150
11 сентября 2019, 15:00

Пишу приложение используя JavaFX, работаю с таблицами, хочу вызвать метод в контроллере, который написан в Main, но почему-то не вижу его. Для большего понятия, что происходит указал подробнее коментарии в коде.

public class Main extends Application {
    private Stage menu;
    private BorderPane mainWindow;
    //коллекция, которую я хочу в итоге передать в контроллер
    private ObservableList<TableIncome> incomeData = FXCollections.observableArrayList();
    public Main(){
        // В качестве образца добавляю некоторые данные
        //TableIncome - это класс типа Model
        incomeData.add(new TableIncome("Доход1"));
        incomeData.add(new TableIncome("Доход2"));
        incomeData.add(new TableIncome("Доход3"));
    }
    //этот метод хочу вызвать в контроллере
    public ObservableList<TableIncome> getIncomeData() {
        return incomeData;
    }
    @Override
    public void start(Stage primaryStage){
        this.menu = primaryStage;
        this.menu.setTitle("Домашняя Бухгалтерия");
        initMenuBar();
        initMainWindow();
    }
    /**
     * Инициализирую menuBar.
     */
    public void initMenuBar() {
        try {
            //идет вызов FXML файла
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * Загружает в корневой макет mainWindow.
     */
    public void initMainWindow() {
        try {
            //идет вызов FXML файла
            // Тут я даю контроллеру доступ к главному приложению.
            MainWindowController controller = loader.getController();
            controller.setMain(this); // компилятор ругается на this, пишет, 
                                      //что setMain (com.sun.tools.javac.Main)
                                      //in MainWindowController cannot be applied, не понимаю почему
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        launch(args);
    }
}

Далее класс контроллер, где пытаюсь вызвать ранее указанный метод getIncomeData

public class MainWindowController {
@FXML
private TableView<TableIncome> tableIncomeTableView;
@FXML
private TableColumn<TableIncome, String> type;
// Ссылка на главное приложение.
    private Main main;
    public MainWindowController() {
    }
    @FXML
    private void initialize() {
        // Инициализация таблицы
        type.setCellValueFactory(cellData -> cellData.getValue().typeProperty());
    }
    /**
     * Вызывается главным приложением, которое даёт на себя ссылку.
     *
     * @param main
     */
    public void setMain(Main main) {
        this.main = main;
        // Добавление в таблицу данных из наблюдаемого списка
        tableIncomeTableView.setItems(main.getIncomeData);
    }
}

Попытался указать все максимально подробно и не слишком длинно. Сам вопрос еще раз в том, почему я не вижу метод getIncomeData в классе контроллера? Что я не понимаю, что нужно еще раз почитать для большего понимания, и как исправить мне это? Большое спасибо за любые одекватные ответы/комментарии

READ ALSO
Выход за границы поля TextField

Выход за границы поля TextField

Как можно сделать перенос текста на следующую строку при вводе? (Когда текст доходит к границе поля,он как бы начинает двигать его,скрывая...

144
В чем фишка ServletConfig?

В чем фишка ServletConfig?

В чем фишка ServletConfig? Да я понимаю что он нужен что бы передать какие либо параметры в сервлет через дискриптор развертыванияНо зачем это надо?...

126
Как создать exe файл из jar файла на Jenkins?

Как создать exe файл из jar файла на Jenkins?

Подскажите может есть какой то плагин который будет создавать exe файл из jar файла?

135