Mise à jour massive d'une JList
Bonjour,
Je viens d'écrire une petite IHM qui va lire une liste dans un fichier.
Afin d'avoir un composant qui puisse être mis à jour dynamiquement, je passe, lors de la création de ma JList par un DefaultListModel :
Code:
1 2 3
|
DefaultListModel m_inputList = new DefaultListModel();
JList m_inputJlist = new JList(m_inputList); |
Je charge la liste des ligne à afficher, et je souhaite ensuite mettre à jour cette liste.
Je n'ai pas trouvé de méthode qui puisse mettre à jour la liste à partir d'une collection, je passe donc par une boucle :
Code:
1 2 3 4 5 6 7 8
| List<String> items = e.getItemList();
m_inputList.clear();
for (int i= 0; i < items.size(); i++)
{
m_inputList.addElement(items.get(i));
} |
Or, lorsque cette boucle est appelée, le repaint manager de Swing provoque des exceptions de type :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 8351
at javax.swing.plaf.basic.BasicListUI.updateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(Unknown Source)
at javax.swing.plaf.basic.BasicListUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ScrollPaneLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source) |
Je pense que la taille de ma DefaultListModel() est mise à jour trop tôt, c'est à dire avant l'ajout proprement dit des éléments, ce provoque un accès à un élément qui n'est pas encore enregistré.
J'aimerais savoir si quelqu'un a déjà rencontré un problème de ce genre, et si oui, comment il est parvenu à le résoudre.
En vous remerciant par avance.