2016-05-01 15 views
1

Ich versuche String [] als Spaltennamen und String [] [] als Daten zu meiner JavaFx-Tabelle hinzuzufügen. Ich erstelle die Spalten (sie sind sichtbar), aber die Datenwerte sind ein No-Go ... Ich habe keine Ausnahme erhalten, also bin ich ein wenig verwirrt. Ich suchte nach einer anderen Möglichkeit, Elemente zu JavaFX hinzuzufügen, aber sie sind begrenzt und funktionieren auch nicht.JavaFX TableView String [] Spalte und String [] [] Werte

Mein Code ist:

private void createScene(String[] columnNames, String[][] inputData) { 

TableView table = new TableView(); 

table.setEditable(false); 

for (int i = 0; i < columnNames.length; i++) { 

    table.getColumns().add(new TableColumn(columnNames[i])); 

} 

List<List<String>> data = new ArrayList<List<String>>(); 

for (int i = 0; i < inputData.length; i++) { 
    List<String> row = new ArrayList<String>(); 
    for (int j = 0; j < inputData[0].length; j++) { 

     row.add(inputData[i][j]); 

    } 

    data.add(row); 

} 

ObservableList<ObservableList> inpData = FXCollections.observableArrayList(); 

for (List<String> dataList : data) { 
    ObservableList<String> row = FXCollections.observableArrayList(); 
    for (String rowData : dataList) { 
     row.add(rowData); 
    } 
    inpData.add(row); 
} 

table.setItems(inpData); 

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

VBox vbox = new VBox(); 
vbox.setSpacing(5); 
vbox.setPadding(new Insets(10, 0, 0, 10)); 
vbox.getChildren().add(table); 

Scene scene = new Scene(vbox, 500, 500); 
jfxPanel.setScene(scene); 

}

Jede Idee, wie man das Problem lösen?

Antwort

2

Sie müssen jeder Tabellenspalte eine Zellenwertfactory hinzufügen, damit sie weiß, welche Daten angezeigt werden sollen.

I stark empfehlen, Ihre Tabellenansicht und Tabellenspalten korrekt einzugeben, indem Sie ihnen Typparameter bereitstellen.

private void createScene(String[] columnNames, String[][] inputData) { 

    TableView<List<String>> table = new TableView<>(); 

    table.setEditable(false); 

    for (int i = 0; i < columnNames.length; i++) { 

     TableColumn<List<String>, String> column = new TableColumn<>(columnNames[i]); 

     final int colIndex = i ; 
     column.setCellValueFactory(cellData -> 
      new SimpleStringProperty(cellData.getValue().get(colIndex))); 

     table.getColumns().add(column); 

    } 

    List<List<String>> data = new ArrayList<List<String>>(); 

    for (int i = 0; i < inputData.length; i++) { 
     List<String> row = new ArrayList<String>(); 
     for (int j = 0; j < inputData[0].length; j++) { 

      row.add(inputData[i][j]); 

     } 

     data.add(row); 

    } 

    ObservableList<List<String>> inpData = FXCollections.observableArrayList(data); 



    table.setItems(inpData); 

    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

    VBox vbox = new VBox(); 
    vbox.setSpacing(5); 
    vbox.setPadding(new Insets(10, 0, 0, 10)); 
    vbox.getChildren().add(table); 

    Scene scene = new Scene(vbox, 500, 500); 
    jfxPanel.setScene(scene); 

}