我有一个关于从列表(Observable list)向TablewView插入值的过程的问题。
我从GIS网络服务获取信息,该服务在其属性表中有超过3000条记录,包含10列。每列都有不同的值。
我从该服务中提取列名并创建一个列表,然后我对值进行相同操作。
类似于:
columnNamesList: [“第1列”,“第2列”,“第3列”......];
valuesList: [ “record1Column1Value”,“record1Column2Value”,“record1Column3Value”, “record2Column1Value”,“record2Column2Value”,“record2Column3Value”, “record3Column1Value”,“record3Column2Value”,“record3Column3Value”]; 等等。
当我将值插入TableView时,列表中的所有值都会插入到第一列中,之后,表中的每一列都会重复所有值。
见附图。第一列中的所有值都应该是第一个记录。
我的问题是,为什么值不是逐列插入,而是作为批量插入所有列。
如果有人发现问题,为什么值插入指定
,我将不胜感激见下面的代码:
private void addDataToTable(TableView tableView, String serviceUrl){
// Setup the Service and the Query
ServiceFeatureTable featureTable = new ServiceFeatureTable(serviceUrl);
QueryParameters query = new QueryParameters();
query.setWhereClause("1=1");
ListenableFuture<FeatureQueryResult> tableQueryResult = featureTable.queryFeaturesAsync(query, ServiceFeatureTable.QueryFeatureFields.LOAD_ALL);
tableQueryResult.addDoneListener(() -> {
//Return data after the query
try{
ArrayList<String> flds = new ArrayList<>();
ObservableList<String> data = FXCollections.observableArrayList();
FeatureQueryResult result = tableQueryResult.get();
int numerOfFields = result.getFields().size();
// Add a tableColumn into the table for each field found in the service
for(int i=0; i<numerOfFields; i++){
String fldName = result.getFields().get(i).getName();
System.out.println("Nume camp: " + fldName.toString());
flds.add(fldName);
TableColumn<String, String> tableColumn = new TableColumn(fldName);
tableColumn.setCellValueFactory(param -> new ReadOnlyStringWrapper(param.getValue()));
//Add tableColumn with the specified name
tableView.getColumns().add(tableColumn);
}
Iterator<Feature> iterator = result.iterator();
//while(iterator.hasNext()){
//Getting only the first record from the data for test purpose
for(int z= 0; z<1; z++){
Feature feature = iterator.next();
System.out.println(feature.getAttributes().values().getClass().getName());
for(int j=0; j<numerOfFields; j++){
//For each field found for that record, add the value into the DATA list
data.addAll(feature.getAttributes().get(flds.get(j)).toString());
}
}
// Add data list into the tableView
tableView.setItems(data);
}catch (Exception e){
e.printStackTrace();
}
});
}
更新! 我在下一页找到了解决方案:http://blog.ngopal.com.np/2011/10/19/dyanmic-tableview-data-from-database/