XTableView
extends the regular TableView
class and supports an optional, embedded filter header row.
The corner button provides a popup to modify visibility of each column and the filter row as well. The clear button of the filter
row clears out all filter inputs at once.
ObservableList persons = createItems();
// enable filter support
FilteredList filtered = new FilteredList(persons);
// data should be sortable too
SortedList sorted = new SortedList(filtered);
XTableView table = new XTableView<>(sorted);
sorted.comparatorProperty().bind(table.comparatorProperty());
table.setEditable(true);
XTableColumn first = new XTableColumn<>("First Name");
table.getColumns().addAll(first);
first.setCellValueFactory(new PropertyValueFactory<>("firstName"));
first.setCellFactory(TextFieldTableCell.forTableColumn());
first.setColumnFilter(new PatternColumnFilter<>());
...
XTableColumn last = new XTableColumn("LastName");
table.getColumns().addAll(last);
last.setCellValueFactory(new PropertyValueFactory<>("lastName"));
last.setColumnFilter(new PatternColumnFilter<>());
...
XTableColumn emailHeader = new XTableColumn("Emails");
table.getColumns().addAll(emailHeader);
XTableColumn email = new XTableColumn("Primary");
XTableColumn secondary = new XTableColumn("Secondary");
emailHeader.getColumns().addAll(email, secondary);
email.setCellValueFactory(new PropertyValueFactory<>("email"));
email.setColumnFilter(new PatternColumnFilter());
secondary.setCellValueFactory(new PropertyValueFactory<>("secondaryMail"));
secondary.setColumnFilter(new PatternColumnFilter());
...
The screenshot was taken from XTableViewDemo which can be downloaded from the link below.