JavaFX TableView Paginator
javafx, javafx-2
Solution
You have to use the Pagination control and implement a page factory. The factory is called for every page that should be displayed and you can use its parameter, the pageIndex, to provide a sublist of items to the TableView:
TableView table = ...
private Node createPage(int pageIndex) {
int fromIndex = pageIndex * rowsPerPage;
int toIndex = Math.min(fromIndex + rowsPerPage, data.size());
table.setItems(FXCollections.observableArrayList(data.subList(fromIndex, toIndex)));
return new BorderPane(table);
}
@Override
public void start(final Stage stage) throws Exception {
Pagination pagination = new Pagination((data.size() / rowsPerPage + 1), 0);
pagination.setPageFactory(this::createPage);
...
}
A complete runnable example can be found here: https://gist.github.com/timbuethe/7becdc4556225e7c5b7b
Problem
How use in TableView paginator.?.For This exmple... ``` public class SampleController implements Initializable { @FXML private TableView<Student> table; @FXML private TableColumn<Student, Integer> id; @FXML private TableColumn<Student, String> name; @FXML private ObservableList<Student> list = FXCollections.observableArrayList(); // @FXML private Pagination pagination; // private StudentSQL ssql = new StudentSQL(); private Stage stage = new Stage(); private String row; @Override public void initialize(URL url, ResourceBundle rb) { id.setCellValueFactory(new PropertyValueFactory<Student, Integer>("id")); name.setCellValueFactory(new PropertyValueFactory<Student, String>("name")); list = ssql.students(); table.setItems(list); } } ```