如何解决在动态JavaFX TableView中复制数据
我有一个表,该表是从给定数据库动态加载的;问题是它重复数据。这是生成表的方法:
@FXML
public void buildCentres() {
Connection c;
ResultSet result;
ObservableList<ObservableList> centers = FXCollections.observableArrayList();
try {
c = DBconnection.getconection_planning();
result = c.createStatement().executeQuery("SELECT centreno,centrename FROM plan_centres");
for (int i = 0; i < result.getMetaData().getColumnCount(); i++) {
final int j = i;
TableColumn col = new TableColumn(result.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());
}
});
HomeView.getColumns().addAll(col);
}
while (result.next()) {
//Iterate Row
ObservableList<String> row = FXCollections.observableArrayList();
for (int i = 1; i <= result.getMetaData().getColumnCount(); i++) {
//Iterate Column
row.add(result.getString(i));
}
centers.add(row);
}
HomeView.setItems(null);
HomeView.setItems(centers);
c.close();
result.close();
} catch (Exception e) {
// Something to notify
}
}
这是界面:
列和行是重复的,当我想清除表并加载其他内容时,它会将新内容作为现有列中的列添加。 预先感谢您的帮助。
解决方法
您无需在每个查询上创建列。
可以将第一个循环包装在if (HomeView.getColumns().isEmpty())
中,或者在第一个循环之前清除它们。
行生成代码看起来不错,因此请确保您没有两次调用buildCentres()
,并且数据库中没有重复的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。