Если вы хотите загрузить большую таблицу, вы можете использовать поток SwingWorker (подробности здесь ) для загрузки таблицы в фоновом режиме. Загрузка таблицы с 500 строками не должна быть проблемой. Затем вы можете поместить данные в подходящий формат объекта и передать их в TableModel.
Если вы решите использовать Список, например, в вашей табличной модели у вас может быть два списка:
List allData
List viewData
int startIndex
Список viewData - это то, на что ссылается метод getValueAt (..) в вашей реализации интерфейса TableModel. Список viewData всегда является подмножеством (ограниченным startIndex длиной 5) всех данных. Когда пользователь нажимает «Далее», слушатель действия может вызвать метод в модели таблицы, который увеличивает startIndex на 5 (или что-то еще). Затем вы регенерируете свой экземпляр viewData, чтобы он представлял собой подходящее подмножество из 5 строк allData, и вызываете fireTableChanged (). Это будет легко, если вы сначала расширили AbstractTableModel .
Это должно быть довольно просто реализовать. Я думаю, что это лучше, чем делать вызовы из базы данных каждый раз, когда вы хотите получить следующий набор данных. ИМХО, лучше предварительно потратить немного времени на предварительную загрузку данных.