JavaFX TableView中的重复列

时间:2015-04-05 23:36:50

标签: java javafx tableview

我从MySQL数据库中提取ResultSet并尝试在按键事件中动态构建TableView。它在我第一次触发它时工作正常,但随后它会创建我的初始列的重复项,同时更改每列的行数据以匹配新的ResultSet。我希望每次运行这个构建函数时都能完全清除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.getColumns.removeAll()
  • 清除TableView的列

enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

在开始添加之前,只需清除当前列:

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

答案 1 :(得分:0)

    columnCita.setCellValueFactory(new PropertyValueFactory<>("cita"));
    columnLast.setCellValueFactory(new PropertyValueFactory<>("ultimavisita"));
    columnImporteF.setCellValueFactory(new PropertyValueFactory<>("precio"));

    columnCita.prefWidthProperty().bind(table.widthProperty().divide(15));
    columnLast.prefWidthProperty().bind(table.widthProperty().divide(6));
    columnImporteF.prefWidthProperty().bind(table.widthProperty().divide(9));

在我的情况下,下一行是错误的。因为我已经添加了列。

    table.getColumns().addAll(columnCita, columnLast, columnImporteF);

问题是您要重新添加列。