Scénario:Evénement JTable + TableModel de récupération de cache pour une instanciation paresseuse?
Vous utilisez une table JTable avec un TableModel personnalisé pour afficher le contenu de certaines collections situées dans une base de données ou sur le réseau ou autre.
La force brute pour faire ce travail est de charger toute la collection à la fois. Disons que ce n'est pas pratique en raison des ressources nécessaires. Le moyen le plus simple de contourner ce problème consiste à récupérer des lignes à la demande, une ligne à la fois, lorsque la table JTable affiche chaque ligne et appelle TableModel.getValueAt(); Cache si nécessaire. Cela provoque beaucoup de hits à la base de données, cependant.
Existe-t-il un moyen d'écouter les événements scroll/viewport pour un JTable, pour déterminer les lignes qu'il va afficher avant de rendre chaque cellule? Si c'est le cas, j'aimerais intercepter et faire en sorte que mon TableModel personnalisé préextrait une page à la fois. Pour clarifier, il s'agit ici de pouvoir extraire le contenu d'un groupe de rangées de tables visibles en un seul lot, plutôt que d'avoir à chercher le contenu de chaque rang par lui-même.
Afin de garder la vue-modèle comme relation 1-n, je pense qu'il est préférable de ne pas interroger la fenêtre d'affichage, mais de simplement compter sur les demandes réelles effectuées sur le modèle. ce ne sera pas plus rapide de vérifier vous-même la fenêtre. renvoyer 'null' pour les cellules non remplies ne pose aucun problème car, lorsque votre volume réel de données provient du back-end, vous pouvez simplement générer des événements tableRow. et le jtable se régénérera à nouveau. Vous pouvez réinitialiser un temporisateur à chaque requête model.getValue(). et dès que la minuterie se déclenche (disons 10 ms), récupère les enregistrements qui ont été interrogés dans une requête groupée. – Houtman