Bonjour, j'ai du faire une JTable un peu compliqué pour moi en tout cas et afficher une une JTable de 2colonnes, l'une contenant le nom d'un objet issue d'un model, et la 2eme colonnes le nom de l'élement sélectionné dans l'objet affiché dans la 1ere.
c'est clair ??

En fait je devais afficher dans la 1ere colonne le nom d'un groupe, et dans la deuxieme un élément du groupe.

Donc j'ai mis un defaultCellEditor special pour ma comboBox et celui-ci met à jour son model suivant la ligne ou il se trouve car il fallait que le liste associé au groupe correspondent biena ses élémentS.
j'ai eu beaucoup de mal, mais maintenant cela marche il reste juste un truc.

Quand je sélectionne une ligne 2ieme colonne, la comboBox s'affiche, la liste est la bonne, mais le label écrit tout en haut au niveau de la ligne de la JTabe ressemble beaucoup à l'adresse de mon objet. Alors que pour tant lorsque la comboBox se déroule les nom sont bien ceux qu'il faut, et lorsque je sélectionne la Table affiche les bon...


exemple j'ai un groupe A avec les élément a1, a2, a3.
un groupe B avec b1, b2, b3

je dois afficher (suivant le choix biensur)

A------------a1
B------------b1
-> ca c'est bon.

par contre si je clicke sur a1, la comboBox s'édite
A------------@12131
--------------a1 (surligné car c'est lui qui était préalablement sélectionné)
--------------a2
--------------a3

-> le probleme vient que l'on voit @12131 tout en haut...., alors que le model de ma comboBox contient seulement a1, a2, a3.
On dirait que @12131 est l'@ de l'objet a1...

je vous joins mon code, en espérant qu'il soit compréhensible.
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
 
  private void initEventTable(JTable table) {
    table.setModel(new myTableAdapter(myModel));
    table.setDefaultRenderer(Model.class, new DefaultTableCellRenderer() {
      public Component getTableCellRendererComponent(JTable table, Object value,
          boolean isSelected, boolean hasFocus, int row, int column) {
        Model model = (Model) value;
        if (column == 0) {
          EventGroup eventGroup = (EventGroup) model.getElementAt(row);
          setText(eventGroup.getName());
        } else {
// Récupère le bon groupe suivant la ligne.
          Group group = (Group) model2.getElementAt(row);
// Récupère la liste associé à ce groupe          
          Model model = group.getModel();
// Récupère l'élément du groupe pour cette ligne
            Event event = (Event) model.getElementAt(0);
              setText(event.getName());
          }
        }
        return this;
      }
    });
    table.setDefaultEditor(Model.class, new EventCellEditor(myModel),subGroup));
  }
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
 
public class SelectionEventTableAdapter  extends DefaultTableModel {
  private Model            model;
  private String[]         rows;
 
  public SelectionEventTableAdapter (Model model) {
    this.model = model;
    createRowsName();
  }
 
  public Object getValueAt(int rowIndex, int columnIndex) {
    Object value = null;
    if (columnIndex == 0) {
      value = rows[rowIndex];
    } else {
// Renvoi le model du groupe suivant la ligne.
      Group group = (Group) model.getElementAt(rowIndex);
      value = group.getModel();
    }
    return value;
  }
 
  public Class getColumnClass(int columnIndex) {
    if (columnIndex == 0) {
      return String.class;
    } else {
      return Model.class;
    }
  }
}
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
 
public class EventCellEditor extends AbstractCellEditor implements TableCellEditor {
  private Model     model;
  private JComboBox comboBox;
  private SubGroup  subGroup;
 
  public EventCellEditor(Model model, final SubGroup subGroup) {
    this.model = model;
    this.subGroup = subGroup;
    comboBox = new JComboBox();
    comboBox.setRenderer(new DefaultListCellRenderer() {
      public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if (index != -1) {
          Event event = (Event) value;
          if (event != null) {
            setText(event.getName());
          }
        }
        return this;
      }
    });
    comboBox.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent event1) {
        Event event = (Event) comboBox.getSelectedItem();
        addEvent(event);
      }
    });
  }
 
  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    Group group = (Group) model.getElementAt(row);
// Fixe le model de la comboBox avec le groupe correpondant à la ligne.
    comboBox.setModel(new DefaultComboBoxModel(group.getModel().toArray()));
    comboBox.setSelectedItem(event);
    return comboBox;
  }
 
  public Object getCellEditorValue() {
    return comboBox;
  }
}
J'espere que tout cela n'est pas trop long et que cela ne va pas découragé....

Merci