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 :
Je charge la liste des ligne à afficher, et je souhaite ensuite mettre à jour cette liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DefaultListModel m_inputList = new DefaultListModel(); JList m_inputJlist = new JList(m_inputList);
Je n'ai pas trouvé de méthode qui puisse mettre à jour la liste à partir d'une collection, je passe donc par une boucle :
Or, lorsque cette boucle est appelée, le repaint manager de Swing provoque des exceptions de type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)); }
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é.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
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.
Partager