Пишу приложение используя 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
в классе контроллера? Что я не понимаю, что нужно еще раз почитать для большего понимания, и как исправить мне это? Большое спасибо за любые одекватные ответы/комментарии
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как можно сделать перенос текста на следующую строку при вводе? (Когда текст доходит к границе поля,он как бы начинает двигать его,скрывая...
В чем фишка ServletConfig? Да я понимаю что он нужен что бы передать какие либо параметры в сервлет через дискриптор развертыванияНо зачем это надо?...
Подскажите может есть какой то плагин который будет создавать exe файл из jar файла?