Bonjour,

J'ai un petit soucis : d'un côté j'ai un ensemble de IModel (objets métiers) qui varient avec le temps et d'un autre côté j'ai une JTable qui s'en sert.
Par exemple, j'ai une JTable Niveaux avec une liste de niveaux (leur nom) et une JTable Joueurs qui contient une liste de joueurs (nom, prénom, niveau). Le niveau d'un joueur est sélectionnable via une JCombobox.
C'est JCombobox à un Renderer spécifique (voir fichier ci-dessous (ligne 42), il va directement cherché son contenu dans le model de la JTable des niveaux (source). J'ai vérifier via de System.out.println que la liste récupéré est la bonne, de ce côté là, pas de problème.
Mon but est de mettre à jour le contenu des combobox de Joueurs pour qu'il soit identique au contenu de Niveaux, les évènements sont gérés sans problème.

ModelRenderer.java
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
 
import java.awt.Component;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.table.TableCellRenderer;
 
public class ModelRenderer implements ListCellRenderer<IModel>, TableCellRenderer
{
    protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
    protected AbstractModelTableGui source;
    protected boolean required;
 
    public ModelRendererGui(AbstractModelTableGui source, boolean required)
    {
        this.source = source;
        this.required = required;
    }
 
    @Override
    public Component getListCellRendererComponent(JList<? extends IModel> list,
            IModel value, int index, boolean isSelected, boolean cellHasFocus)
    {
        JLabel renderer = (JLabel) defaultRenderer
                        .getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
 
        if (value != null)
            renderer.setText(value.getTitle());
        else
            renderer.setText("");
        return renderer;
    }
 
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column)
    {
        JComboBox c = new JComboBox();
        c.setRenderer(this);
        int l = this.source.getLines().size();
        IModel selected = null;
 
        if (!this.required)
            c.addItem(null);
 
        for (int i = 0; i < l; ++i)
        {
            if (this.source.getNextRequiredColumn(i) == -1)
            {
                c.addItem((IModel)this.source.getModel(i));
                if (value != null && ((IModel)value).getId() == ((IModel)this.source.getModel(i)).getId())
                    selected = (IModel)this.source.getModel(i);
            }
        }
 
        // Select the current value
        c.setSelectedItem(selected);
        return c;
    }
}
Quand je modifie le nom d'un niveau, le changement est impacté dans la JCombobox, mais dès que j'ajoute ou que je supprime un niveau, ma liste reste fixe alors que la méthode est appelée et que les bonnes données sont récupérées.

Je ne sais plus quoi faire, auriez-vous une idée ?

Par avance,
Merci.