Bonjour,

J'essaye de remplir une Jtable depuis un arraylist dont une colonne est aussi un arraylist, et cette colonne est sous forme de comboBox.
le model de ma table :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class LivresModel extends AbstractTableModel {
	private final String[] titresColonnes;
	private ListeLivres livres;
 
	public LivresModel(String[] titresColonnes,ListeLivres livres){
		this.titresColonnes=titresColonnes;
		this.livres=livres;
 
	}
	@Override
	public int getColumnCount() {
		return titresColonnes.length;
	}
 
	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return livres.size();
	}
 
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
 
		switch (columnIndex) {
		//"Cote", "Titre", "Date Edition","Theme", "Editeur", "Description","Auteurs"
		case 0:
			// cote
			return livres.get(rowIndex).getCote();
 
		case 1:
			// titre
			return livres.get(rowIndex).getTitre();
 
		case 2:
			// Date edition
			return livres.get(rowIndex).getDateEdition();
 
		case 3:
			// Theme
			return livres.get(rowIndex).getTheme().getTheme();
 
		case 4:
			//Editeur
			return livres.get(rowIndex).getEditeur().getNom();
		case 5:
			// Description
			return livres.get(rowIndex).getDescription();
		case 6:
			// Auteurs
			return livres.get(rowIndex).getAuteurs();
 
 
		default:
			throw new IllegalArgumentException();
		}
	}
	@Override
	public String getColumnName(int columnIndex) {
		return titresColonnes[columnIndex];
	}
 
	public ListeLivres getLivres() {
		return livres;
	}
	@Override
	public Class<? extends Object> getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
 
 
 
}
Alors simplement j'arrive a faire le TableCellRenderer comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package utilitaires;
 
import java.awt.Component;
import java.util.Iterator;
 
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
 
import metier.Auteur;
import metier.Collections.CollAuteurs;
 
public class ComboBoxRenderer implements TableCellRenderer
{
	private TableCellRenderer delegate;
	public ComboBoxRenderer(TableCellRenderer defaultRenderer)
	{
		this.delegate = defaultRenderer;
 
	}
 
	public Component getTableCellRendererComponent(JTable table, Object value, 
			boolean isSelected, boolean hasFocus, int row, int column) {
 
		//remember - the default renderer is a label instance for values of data types String, Object and Number    
		Component c = delegate.getTableCellRendererComponent(table, value, isSelected,hasFocus, row, column);
 
		CollAuteurs<Auteur> auteurs =  (CollAuteurs<Auteur>) value;
		JComboBox<String> combo = new JComboBox<>();
		Iterator<Auteur> iter = auteurs.iterator();
		while (iter.hasNext()) {
			Auteur auteur = iter.next();
			combo.addItem(auteur.getNom());
		}
 
		combo.setEditable(true);
		c = combo;	
 
		return c;
	}
}
J'applique le tableCellRenderer a la colonne 6 de ma table :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
TableCellRenderer defaultRenderer  = paneltable.getTable().getDefaultRenderer(Object.class);
		TableCellRenderer comboRenderer   = new ComboBoxRenderer(defaultRenderer);
 
		paneltable.getTable().getColumnModel().getColumn(6).setCellRenderer(comboRenderer);
Ce qui me donne ceci :


Seulement j'aimerais faire un model de Combo pour ne pas devoir boucler avec l'iterator sur la collectionAuteur

J'ai donc fait un model :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
public class JComboBoxModel extends AbstractListModel implements
ComboBoxModel {
	private Object selectedItem;
 
	private CollAuteurs<Auteur> anArrayList;
 
	public JComboBoxModel(CollAuteurs<Auteur> value) {
		anArrayList =  value;
	}
 
	public Object getSelectedItem() {
		return selectedItem;
	}
 
	public void setSelectedItem(Object newValue) {
		selectedItem = newValue;
	}
 
	public int getSize() {
		return anArrayList.size();
	}
 
	public Object getElementAt(int i) {
		return anArrayList.get(i);
	}
}
Et j'ai donc enlevé la boucle et remplacé par ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
JComboBox<String> combo = new JComboBox<>(new JComboBoxModel((CollAuteurs<Auteur>) value));
c = combo;
Resultat :

J'ai écrémé pas mal d'exemple de code, de post sur le forum sur les jcombobox dans des jtable mais j'ai pas vu de cas ou la table était basée sur un model don la source de donnée est une arraylist, et don une de ses colonnes est également une arraylist.


Vous pouvez m'éclairer ?

Merci

Edit: pourtant le combobox contient bien mon arraylist d'auteur :