JavaFX (libraries and tools for UI design and programming) provides a great component called TableView, which accepts easy binding with POJO data through CellFactories. In a nutshell you provide a collection of entities and configure each column of the table with a CellFactory that knows how to get a specific data from one of those entities.

The current version of JavaFX provides a class called PropertyValueFactory, that automatically gets the data from the entity using reflection (you supply the field name as a String) and creates a Property field, that is passed to the TableColumn of the TableView. But, this convenience class does not allow data formatting, so it's necessary to create a custom CellValueFactory for that.

I've created a very simple project on GitHub that provides custom CellValueFactories for Date and BigDecimal formating. It's called jfxCellValueFactories and can be downloaded here: https://github.com/danielgimenes/jfxCellValueFactories/releases/

Those classes work as the PropertyValueFactory, but allow easy formatting, accepting a format string on the constructor.

Example of using FormattedDateValueFactory:

[code language="java"]
public class MyEntity {
private Date date;

public Date getDate() {
return this.date;
}
}

public class MyController {
@FXML
private TableView<MyEntity> tableView;

@FXML
private TableColumn<MyEntity, String> dateColumn;

// ...

private void configureTableView() {
dateColumn.setCellValueFactory(new FormattedDateValueFactory<InvoiceTableEntry>("date", "dd/MM/yyyy"));
}

// ...

private void queryData() {
List<MyEntity> data = myService.getData();
tableView.setItems(FXCollections.observableList(data));
}
}
[/code]