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 :
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
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(); } }
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
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; } }
Ce qui me donne ceci :
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);
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 :
Et j'ai donc enlevé la boucle et remplacé par 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 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); } }
Resultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 JComboBox<String> combo = new JComboBox<>(new JComboBoxModel((CollAuteurs<Auteur>) value)); c = combo;
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 :
![]()
Partager