Si vous souhaitez charger un grand tableau, vous pouvez utiliser un SwingWorker (détails aquí ) pour charger le tableau en arrière-plan. Le chargement d'un tableau de 500 lignes ne devrait pas poser de problème. Vous pouvez ensuite placer les données dans un format d'objet approprié et les transmettre à votre TableModel.
Si vous décidez d'utiliser une liste par exemple, vous pouvez avoir deux listes dans votre modèle de table :
List allData
List viewData
int startIndex
La liste viewData est ce qui est référencé par la méthode getValueAt(..) dans votre implémentation de l'interface TableModel. La liste viewData est toujours un sous-ensemble (lié par startIndex, de longueur 5) de allData. Lorsque l'utilisateur clique sur "Next", votre écouteur d'action peut appeler une méthode sur le modèle Table qui incrémente startIndex de 5 (ou autre). Vous régénérez ensuite votre instance viewData pour qu'elle soit le sous-ensemble approprié de 5 lignes de allData, et appelez fireTableChanged(). Cela sera facile si vous avez étendu AbstractTableModel en premier lieu.
Cela devrait être assez simple à mettre en œuvre. Je pense que c'est mieux que de faire un appel à la base de données chaque fois que vous voulez obtenir le prochain ensemble de données. Je pense qu'il est préférable de prendre un peu plus de temps en amont pour précharger les données.