Заполните TableView, используя базу данных H2 в JavaFX из другой модели - PullRequest
0 голосов
/ 27 октября 2018

Я хочу заполнить столбец названием текущего семестра. Это будет называться "bezeichnung". Вместо показа семестра, я получаю направление хранения с @xyz, вы знаете. Проблема в том, что база данных имеет, например, таблицы (и в java модели для этого с геттерами и сеттерами) группировка и семестр. В сборной должны быть setSemester и getSemester, потому что я хочу добавить и удалить columnItems и необходимо выбрать семестр. Так что я должен получить семестр по ID, но я не знаю, как:

 //configure the table
@FXML private TableView<Groupage> tableView;
@FXML private TableColumn<Groupage, String> IDColumn;
@FXML private TableColumn<Groupage, String> BezeichnungColumn;
@FXML private TableColumn<Groupage, Semester> SemesterColumn;

DBManager connector = new DBManager();

public void buttonAddGroupage() {
    Groupage grou = new Groupage();

    grou.setBezeichnung(Bezeichnung.getText());
    grou.setSemester(Semesterauswahl.getValue());

    connector.addGroupage(grou);
    initialize(null, null);
}

public void buttonDeleteGroupage() {
    Groupage grou = tableView.getSelectionModel().getSelectedItem();    
    connector.deleteGroupage(grou, true);
    initialize(null, null);
}

public void buttonDetails() {

}

public void initialize(URL url, ResourceBundle rb) {
    //set up the columns in the table
    IDColumn.setCellValueFactory(new PropertyValueFactory<Groupage, String>("id"));
    BezeichnungColumn.setCellValueFactory(new PropertyValueFactory<Groupage, String>("bezeichnung"));
    SemesterColumn.setCellValueFactory(new PropertyValueFactory<Groupage, Semester>("semester"));

    //load dummy data
    tableView.setItems(getGroupage());

    //Update the table to allow for the first and last name fields
    //to be editable
    tableView.setEditable(true);
    BezeichnungColumn.setCellFactory(TextFieldTableCell.forTableColumn());
    //SemesterColumn.setCellFactory(TextFieldTableCell.forTableColumn());

    //This will allow the table to select multiple rows at once
    tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
   // List<Semester> semester = connector.showSemesterAll();

   // for (int i=0; i < semester.size(); i++) {
   //   semester.add(semester.get(i));
  //  }
    Semesterauswahl.setItems(getSemester());


    //Semesterauswahl.getItems().add(null);

}

 public ObservableList<Groupage> getGroupage() {
        ObservableList<Groupage> groupage = FXCollections.observableArrayList();

        ArrayList<Groupage> merge = (ArrayList<Groupage>) connector.showGroupageAll();

        for (int i=0; i < merge.size(); i++) {
            groupage.add(merge.get(i));
        }
        return groupage;
 }

 public ObservableList<Semester> getSemester() {
        ObservableList<Semester> semester = FXCollections.observableArrayList();

        ArrayList<Semester> merge = (ArrayList<Semester>) connector.showSemesterAll();

        for (int i=0; i < merge.size(); i++) {
            semester.add(merge.get(i));
        }
        return semester;
 }

Методы БД в H2 выглядят так:

    public List<Semester> showSemesterAll() {
            try {
                ConnectionSource connectionSource = new 
    JdbcConnectionSource(DB_URL, USER, PASS);
                Dao<Semester, String> semDao = 
   DaoManager.createDao(connectionSource, Semester.class);
            List<Semester> reSemester = new ArrayList<>();
            CloseableIterator<Semester> iterator = semDao.closeableIterator();
            try {
                while (iterator.hasNext()) {
                    Semester mysemcycle = iterator.next();
                    reSemester.add(mysemcycle);
                }

            } finally {
                iterator.close();
            }

            return reSemester;
        } catch (SQLException | IOException se) {
            se.printStackTrace();
        }
        return null;
    }
...