2010-12-28 5 views
0

J'ai étendu le AbstractTableModel pour répondre à mes besoins. Maintenant, cette table peut être modifiée par d'autres méthodes de mon interface graphique. Je veux que la table défile jusqu'à la cellule actuellement éditée. Pour ce faire, je pense que je dois d'abord obtenir le JViewport de l'actuel JComponent, mais je ne vois aucune méthode par laquelle je peux y parvenir? Comment puis-je y parvenir?Rendre une cellule visible dans JTable lorsque AbstractTableModel est étendu

Je l'ai déjà fait quand j'ai utilisé le JTable par défaut, mais comment faire quand nous étendons AbstractTableModel?

Répondre

1

Les modèles sont conçus pour stocker des données et notifier les vues lorsque les données ont changé. Il notifie la vue d'un changement de données par des événements de tir. C'est la responsabilité de la vue d'écouter ces événements. Par conséquent, le modèle ne sait jamais directement quelle vue est mise à jour. Ce type de fonctionnalité NE DOIT PAS faire partie du modèle.

Une approche pourrait être d'utiliser un TableModelListener. Vous pouvez créer un TableModelListner avec la table en tant que paramètre. Ensuite, lorsque les données sont modifiées, l'auditeur sera averti. Vous pouvez ensuite appeler table.scrollRectToVisible (...) sur la table. Cependant, avec cette approche, vous ne pouvez pas distinguer entre les éditions qui ont été appliquées directement via le TableModel et les udates qui ont été effectuées via la JTable elle-même.

0

Vous souhaiterez peut-être que votre table déclenche un événement et que votre composant parent écoute cet événement et défile en conséquence. De cette façon, votre table n'a pas besoin de connaître son volet de défilement parent.

Vous pouvez utiliser EventListenerList dans DefaultTableModel pour notifier les écouteurs.

+0

Je ne vous ai pas compris, comment pouvons-nous faire défiler sans avoir la fenêtre? Et quand je développe le modèle de table abstrait, la hiérarchie est quelque chose comme Object -> AbstractTableModel -> MyTableModel. Comment puis-je obtenir la fenêtre pour que je puisse réaliser le défilement? – sasidhar

+0

S'il vous plaît aidez-moi, j'en ai besoin très urgent. – sasidhar

+0

Quelle classe instancie votre modèle de table personnalisé? Avoir cette classe de composant ajouter un écouteur personnalisé à votre modèle de table personnalisé. Lorsqu'une modification se produit dans votre modèle de table, votre modèle de table avertit tous les écouteurs. Votre écouteur doit avoir une référence à la fois au modèle de table et au JScrollPane, et peut défiler en conséquence. –

Questions connexes