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:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 jScrollPaneTable.getVerticalScrollBar().setMaximum(jScrollPaneTable.getVerticalScrollBar().getMaximum() + 16); jScrollPaneTable.getVerticalScrollBar().setValue(jScrollPaneTable.getVerticalScrollBar().getMaximum());
J'ai ausis essayé ce bout de code, mais sans succès:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int i = (jTableDataConcil.getRowHeight() * jTableDataConcil.getRowCount()); Point p = new Point(0, i); jScrollPaneTable.getViewport().setViewPosition(p);
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
Partager