从ObservableList <string> list

时间:2017-12-20 10:06:02

标签: java insert tableview tablecolumn

我有一个关于从列表(Observable list)向TablewView插入值的过程的问题。

我从GIS网络服务获取信息,该服务在其属性表中有超过3000条记录,包含10列。每列都有不同的值。

我从该服务中提取列名并创建一个列表,然后我对值进行相同操作。

类似于:

columnNamesList: [“第1列”,“第2列”,“第3列”......];

valuesList: [ “record1Column1Value”,“record1Column2Value”,“record1Column3Value”, “record2Column1Value”,“record2Column2Value”,“record2Column3Value”, “record3Column1Value”,“record3Column2Value”,“record3Column3Value”]; 等等。

当我将值插入TableView时,列表中的所有值都会插入到第一列中,之后,表中的每一列都会重复所有值。

见附图。第一列中的所有值都应该是第一个记录。

Click to see print

我的问题是,为什么值不是逐列插入,而是作为批量插入所有列。

如果有人发现问题,为什么值插入指定

,我将不胜感激

见下面的代码:

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/

0 个答案:

没有答案