I have an ArrayList and the data inside it has been read from an excel file. I now want to create a TableView in my JavaFX app that gets populated from the ArrayList that has been created. I have a class that contains all the address data that gets read such as building number, street name etc. but I can't seem to take this data and put it into the table view, which is just blank.
Here is the code I have produced so far:
List<AddressDetails> addressList = ReadExcel.readExcel();
TableView<AddressDetails> table = new TableView<>();
ObservableList<AddressDetails> addresses = FXCollections.observableArrayList(addressList);
TableColumn<AddressDetails, String> buildNameCol
= new TableColumn<AddressDetails, String>("Building Name");
buildNameCol.setCellValueFactory(new PropertyValueFactory<AddressDetails, String>("buildName"));
TableColumn<AddressDetails, Double> buildNumCol
= new TableColumn<AddressDetails, Double>("Building Number");
buildNumCol.setCellValueFactory(new PropertyValueFactory<AddressDetails, Double>("buildNum"));
TableColumn<AddressDetails, String> streetCol
= new TableColumn<AddressDetails, String>("Street Name");
streetCol.setCellValueFactory(new PropertyValueFactory<AddressDetails, String>("streetName"));
TableColumn<AddressDetails, String> cityCol
= new TableColumn<AddressDetails, String>("City");
cityCol.setCellValueFactory(new PropertyValueFactory<AddressDetails, String>("city"));
TableColumn<AddressDetails, String> postCol
= new TableColumn<AddressDetails, String>("Postcode");
postCol.setCellValueFactory(new PropertyValueFactory<AddressDetails, String>("postCode"));
TableColumn<AddressDetails, String> countryCol
= new TableColumn<AddressDetails, String>("Country");
countryCol.setCellValueFactory(new PropertyValueFactory<AddressDetails, String>("country"));
table.getColumns().addAll(buildNameCol, buildNumCol, streetCol, cityCol, postCol, countryCol);
table.setItems(addresses);
This is my AddressDetails Class:
public class AddressDetails {
private String buildName;
private double buildNum;
private String streetName;
private String city;
private String postCode;
private String country;
public AddressDetails() {
}
public String getBuildName() {
return buildName;
}
public void setBuildName(String buildName) {
this.buildName = buildName;
}
public double getBuildNum() {
return buildNum;
}
public void setBuildNum(double buildNum) {
this.buildNum = buildNum;
}
public String getStreetName() {
return streetName;
}
public void setStreetName(String streetName) {
this.streetName = streetName;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getPostCode() {
return postCode;
}
public void setPostCode(String postCode) {
this.postCode = postCode;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
This is the excel reader which adds the addresses from the excel file into an ArrayList:
public class ReadExcel {
public static List<AddressDetails> readExcel() {
List<AddressDetails> addressList = null;
try {
Workbook workbook = WorkbookFactory.create(new FileInputStream(FileSelector.getSelectedFile()));
// Get the first sheet from the excel file
Sheet sheet = workbook.getSheetAt(0);
if (sheet != null) {
addressList = readExcelSheet(sheet);
}
} catch (EncryptedDocumentException | IOException | ParseException e) {
e.printStackTrace();
}
if (addressList == null)
addressList = Collections.emptyList();
return addressList;
}
private static List<AddressDetails> readExcelSheet(Sheet sheet) throws ParseException {
Iterator<Row> rowItr = sheet.iterator();
List<AddressDetails> addressList = new ArrayList<>();
// Iterate each row in the sheet
while (rowItr.hasNext()) {
AddressDetails address = new AddressDetails();
Row row = rowItr.next();
// First row is header so skip it
if (row.getRowNum() <= 2) {
continue;
}
Iterator<Cell> cellItr = row.cellIterator();
// Iterate each cell in a row
while (cellItr.hasNext()) {
Cell cell = cellItr.next();
int index = cell.getColumnIndex();
switch (index) {
case 0:
address.setBuildName((String) getValueFromCell(cell));
break;
case 1:
address.setBuildNum((double) getValueFromCell(cell));
break;
case 2:
address.setStreetName((String) getValueFromCell(cell));
break;
case 3:
address.setCity((String) getValueFromCell(cell));
break;
case 4:
address.setPostCode((String) getValueFromCell(cell));
break;
case 5:
address.setCountry((String) getValueFromCell(cell));
break;
}
}
addressList.add(address);
}
return addressList;
}
// Method to get cell value based on cell type
private static Object getValueFromCell(Cell cell) {
switch (cell.getCellType()) {
case STRING:
return cell.getStringCellValue();
case NUMERIC:
return cell.getNumericCellValue();
case BLANK:
return "";
default:
return "";
}
}
}
