2015-04-05 2 views
1

Я вытаскиваю ResultSet из базы данных MySQL и пытаюсь динамически строить TableView в событии с ключом. Он отлично работает в первый раз, когда я его запускаю, но все последующие времена он создает дубликаты моих начальных столбцов при изменении данных строки для каждого столбца в соответствии с новым ResultSet. Я хочу, чтобы TableView очищался полностью каждый раз при выполнении этой функции сборки.Повторяющиеся столбцы в JavaFX TableView

for(int i = 0; i < rs.getMetaData().getColumnCount(); i++) 
     { 
      final int j = i;     
      TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i + 1)); 
      col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){      
       @Override 
       public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {                        
        return new SimpleStringProperty(param.getValue().get(j).toString());       
       }      
      }); 

      tableView.getColumns().addAll(col); 
      System.out.println("Column ["+i+"] "); 
     } 

     while(rs.next()) 
     { 
      ObservableList<String> row = FXCollections.observableArrayList(); 
      row.removeAll(row); 
      for(int i = 1; i <= rs.getMetaData().getColumnCount(); i++){ 
       row.add(rs.getString(i)); 
      } 
      System.out.println("Row [1] added " + row); 
      data.add(row); 
     } 

     tableView.setItems(data); 

Что я пробовал:

  • Наблюдая значение ObservableList данных, которая является пустой, как это пересоздан каждый раз функция выполняется
  • Очистка столбцов в TableView с использованием tableView.getColumns .removeAll()

enter image description here enter image description here

ответ

2

Просто очистить текущие столбцы, прежде чем начать добавлять их:

table.getColumns().clear(); 
for(int i = 0; i < rs.getMetaData().getColumnCount(); i++) { 
    // ... 
}