[JScrollPane] [JTable] Se placer à la dernière ligne
Bonjour,
J'ai un JScrollPane contenant un JTable. J'Utilise windows XP avec java 1.4.2_04.
Lors de l'ouverture de mon programme ou lorsque j'ajoute une ligne, je veux positionner le scroll vertical à la fin (en bas completement quoi...) du JTable....
Facile direz vous, et j'en convient, mais il y a un bug asser fatiguant..., le scroll se positionne toujours à l'avant dernière ligne, laissant la dernière ligne que je vien d'ajouter non visible sans une intervantion manuelle....
Après différent test, je réussit à faire fonctionne lors de l'ouverture du programme, mais jamais lors de l'ajout d'une nouvelle ligne....
Voilà le code qui fonctionne lorsque j'ouvre le programme mais pas lorsque j'ajoute une nouvelle ligne:
Code:
1 2
| jScrollPaneTable.getVerticalScrollBar().setMaximum(jScrollPaneTable.getVerticalScrollBar().getMaximum() + 16);
jScrollPaneTable.getVerticalScrollBar().setValue(jScrollPaneTable.getVerticalScrollBar().getMaximum()); |
Ce code est appleé après que tous mes éléments (JButtons et cie...) soi initialiser avec leur contenu. Je dois rajouter le +16 (hauteur d'une ligne dans mon JTable) sinon à l'ouverture le scroll se place à l'avant dernière ligne.
J'ai ausis essayé ce bout de code, mais sans succès:
Code:
1 2 3
|
int i = (jTableDataConcil.getRowHeight() * jTableDataConcil.getRowCount());
Point p = new Point(0, i); jScrollPaneTable.getViewport().setViewPosition(p); |
Avec ce code, ça fonctionne seuelment si le scroll est déjà en bas complètement, sinon, ca se place seuelment à l'avant dernière ligne.
Mon hypothèse c'est que le JTable n'est redesinner seulement lorsque tout le code est fini d'exécuter, c'est pourquoi le scroll se positionne à la dernière ligne mais lorsque le JTable est redesinné, il se retrouve à l'avant dernière ligne lorsque j'ajoute une ligne.
Alors comment éviter cela?
J'ai vérifié avec des recherche sur google et sur le site de sun ainsi que dans leur bug database, mais rien...
Merci
Francis
jtable qui se positionne à la fin
Dans mon application, je reload le jtable à chaque insert donc le firetable ne fonctionne pas
mais ...j'ai trouvé ce bout de code qui fonctionne à merveille
Code:
1 2 3 4 5 6 7 8 9 10
| // model constructor & JTable creation/load
em = new EmployeeSwipeModel(userId);
tSwipe = new JTable(em);
// scroll to the end of jtable
tSwipe.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
tSwipe.scrollRectToVisible(tSwipe.getCellRect(tSwipe.getRowCount()-1, 0, true));
}
}); |