我想将csv文件加载到我的tableView中但是这里没有填充表格是我的代码。我不知道我在做什么wron
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
答案 0 :(得分: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>>
作为表格中的数据类型。
我没有对此进行测试,因为您只提供了一个文件。