2015-10-16 89 views
0

我想加载一个csv文件到我的tableView中,但表中没有填充这里是我的代码。我不知道我在做什么Javafx TableView无法从observableArrayList加载数据

public class FXMLDocumentController implements Initializable { 
File csv; 
@FXML 
AnchorPane anchorpane; 
Stage stage; 
@FXML 
TableView dataTable; 
@FXML 
TextField path; 
@FXML 
public void browseOnClick(){   
    stage = (Stage) anchorpane.getScene().getWindow(); 
    FileChooser fileChooser = new FileChooser(); 
    fileChooser.setTitle("Open CSV File"); 
    fileChooser.setInitialDirectory(
     new File(System.getProperty("user.home")) 
    ); 
    fileChooser.getExtensionFilters().addAll(
     new FileChooser.ExtensionFilter("Coma separated value", "*.csv") 
    ); 
    csv = fileChooser.showOpenDialog(stage); 
    if(csv != null){ 
     open(); 
    } 
} 
public void open(){ 
    path.setText(csv.getAbsolutePath()); 
    loadCSV(csv, dataTable); 
} 
public void loadCSV(File csv,TableView table) 
     { 
    try { 
     ObservableList<ObservableList> csvData = FXCollections.observableArrayList();  
     Scanner sc = new Scanner(csv); 
      while(sc.hasNext()){ 
       ObservableList<String> row = FXCollections.observableArrayList(); 
       for(String column: sc.nextLine().split(",")){ 
        row.add(column); 
       } 
       csvData.add(row); 
      } 
      table.getItems().clear(); 
      table.getColumns().clear(); 
      table.setItems(csvData); 
      createColums(table, csvData.get(0).size()); 
     } catch (FileNotFoundException ex) { 
      Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex); 
     } 
} 
public void createColums(TableView table,int size){ 
    for(int x = 1; x<size; x++){ 
     TableColumn t = new TableColumn("Paramiter "+x); 
     t.setPrefWidth(120); 
     table.getColumns().add(t); 
    } 
    TableColumn t = new TableColumn("Target"); 
    t.setPrefWidth(120); 
    table.getColumns().add(t); 

} 
@Override 
public void initialize(URL url, ResourceBundle rb) { 
    path.setEditable (false); 
}  
} 

但是当我运行此代码输出是一个空表。 columns and rows added but there is no data

回答

1

您需要一个单元格值工厂。这些列需要知道如何呈现单元格中的数据。最好的方法是输入表格和列。

public void createColums(TableView table,int size){ 
    for(int x = 1; x<=size; x++){ //careful with indexes 
     TableColumn<ObservableList<String>,String> t = new TableColumn<>("Paramiter "+x); 
     t.setPrefWidth(120); 
     final int X = x; 
     t.setCellValueFactory(p -> new SimpleStringProperty(p.getValue().get(X-1))); 
     table.getColumns().add(t); 
    } 
    TableColumn t = new TableColumn("Target"); 
    t.setPrefWidth(120); 
    table.getColumns().add(t); 
} 

我也会使用TableView<ObservableList<String>>作为表中数据的类型。

我没有测试这个,因为你只给了一个文件。

+0

它的工作,谢谢 – noshusan