2013-10-04 83 views
0

下面的javafx代碼不生成2行和2列,而不是顯示2列和1行。Javafx 2.2 - 動態表格視圖 - 表格數據

代碼的邏輯。

列變量。使用for循環添加列以使表格變爲動態。計劃使用for循環添加數據。

import java.util.ArrayList; 
import java.util.List; 

import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.value.ObservableValue; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.fxml.FXML; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.TableColumn.CellDataFeatures; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.util.Callback; 

public class FXMLTableViewController { 
    @FXML private TableView tableview; 

    @FXML 
    private void initialize() { 
     System.out.println(tableview); 
     List<String> columns = new ArrayList<String>(); 
     columns.add("col1"); 
     columns.add("col2"); 
     TableColumn [] tableColumns = new TableColumn[columns.size()];  
     int columnIndex = 0; 
     for(int i=0 ; i<columns.size(); i++) { 
      final int j = i; 
      TableColumn col = new TableColumn(columns.get(i)); 
      col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){     
       public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {                        
        return new SimpleStringProperty(param.getValue().get(j).toString());      
       }     
      }); 
      tableview.getColumns().addAll(col); 
     } 

     ObservableList<ObservableList> csvData = FXCollections.observableArrayList(); 
     ObservableList<String> row = FXCollections.observableArrayList(); 
     ObservableList<String> row1 = FXCollections.observableArrayList(); 
     row.addAll("d1"); 
     row.addAll("d11"); 
     row1.addAll("d2"); 
     row1.addAll("d22"); 
     csvData.add(row); 
     csvData.add(row1); 
     tableview.getItems().add(csvData); 

    } 

} 

回答

0

刪除csvData它將工作。請執行以下操作:

//ObservableList<ObservableList> csvData = FXCollections.observableArrayList(); 
ObservableList<String> row = FXCollections.observableArrayList(); 
ObservableList<String> row1 = FXCollections.observableArrayList(); 
row.addAll("d1"); 
row.addAll("d11"); 
row1.addAll("d2"); 
row1.addAll("d22"); 
//csvData.add(row); 
//csvData.add(row1); 
tableview.getItems().add(row); 
tableview.getItems().add(row1); 

因爲csvData是一個數組,您正在單元格中添加數組。我已經測試過它會正常工作。