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 : 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 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 : 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));
	}
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
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.