JavaFX TableView 中的重复列
Duplicate columns in 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 的列
在开始添加之前清除当前列:
table.getColumns().clear();
for(int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
// ...
}
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);
问题是您再次添加了列。
我正在从 MySQL 数据库中提取一个 ResultSet,并尝试在按键按下事件时动态构建一个 TableView。它在我第一次触发它时工作正常,但所有后续时间它都会创建我的初始列的副本,同时更改每列的行数据以匹配新的 ResultSet。我希望每次此构建函数 运行.
时完全清除 TableViewfor(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 的列
在开始添加之前清除当前列:
table.getColumns().clear();
for(int i = 0; i < rs.getMetaData().getColumnCount(); i++) {
// ...
}
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);
问题是您再次添加了列。