Salve a tutti.
Innanzitutto, spero di non aver violato qualche regola creando questo topic (non ne ho visti di analoghi in giro per il forum e nel topic Pillole eccetera non c'era nulla che potesse risolvere), nè con il nome (non sapevo come metterlo senza farlo lungo 3km).

Detto questo, espongo il mio problema.

Ho un programma Java in cui creo una tabella utilizzando una classe creata ad hoc che estende JTable (questo solo per poter avere più flessibilità sulla visualizzazione dei componenti, ma non cambia nulla riguardo al mio problema rispetto a una JTable vera e propria). In questa tabella inserisco dati di vario tipo (scritte, JButton e JComboBox) e fino alla visualizzazione non c'è problema. Il problema sorge con i listener. Quando cambio il valore di una combo box, graficamente viene cambiato, ma il componente vede sempre come selezionato il vecchio valore. Per cui ho creato un listener dove poter gestire l'evento. Ma quando cambio il valore della combo box, il listener non viene mai eseguito.

Le uniche soluzioni che ho trovato cercando in giro per il web consigliavano di aggiungere un ActionListener o un ItemListener alla combo box quando viene creato l'editor. Qualcuno ha qualche idea del perchè non venga eseguito il listener? Posto il codice.


Editor della combo box:

Codice PHP:
public class MyComboBoxEditor extends DefaultCellEditor{
      public 
MyComboBoxEditor(JTableX _tabellaDiAppartenenza) {
         
super(new JComboBox());                   
         (
JComboBox)super.editorComponent).addItemListener(new MyItemListener((JComboBox)super.editorComponent));     
}
     public 
Component getTableCellEditorComponent(JTable arg0Object arg1boolean arg2int arg3int arg4) {
         
String elementi[]=new String[((JComboBox)arg1).getItemCount()];
         for(
int i=0;i<((JComboBox)arg1).getItemCount();i++){
             
elementi[i]=(String)((JComboBox)arg1).getItemAt(i);
         }
         
super.editorComponent=new JComboBox(elementi);
         return 
super.getTableCellEditorComponent(arg0arg1arg2arg3arg4);
     }
 } 
listener:

Codice PHP:
public class MyItemListener implements ItemListener{
    private 
JComboBox combo;
    public 
MyItemListener(JComboBox object){
        
combo=object;
    }
    public 
void itemStateChanged(ItemEvent arg0) {
        
int changeEvent arg0.getStateChange();
        if(
changeEvent==ItemEvent.SELECTED){
            
Object value=arg0.getItem();
            
combo.setSelectedItem(value);
        }
    }

tabella:
Codice PHP:
public class JTableX extends JTable{
    protected 
MyCellEditorModel myCellEditorModel;
    public 
JTableX(MyDataModel tm){
        
super(tm);
        
Object ge defaultEditorsByColumnClass.get(Boolean.class);
        
DefaultCellEditor dce = (DefaultCellEditor)ge;
        
dce.setClickCountToStart(0);
        
MyButtonEditor mbe = new MyButtonEditor(new JCheckBox("Bottone"), this);
        
mbe.setClickCountToStart(0);
        
MyComboBoxEditor mcbe = new MyComboBoxEditor(this);
        
mcbe.setClickCountToStart(0);
        
defaultEditorsByColumnClass.clear();
        
Hashtable cellEditors = new Hashtable();
        
cellEditors.put(JButton.class, mbe);
        
cellEditors.put(JComboBox.class, mcbe);
        
cellEditors.put(Boolean.class, dce);
        
this.defaultRenderersByColumnClass.put(JButton.class, new MyButtonRenderer());
        
this.defaultRenderersByColumnClass.put(JComboBox.class, new MyComboBoxRenderer());
        
defaultEditorsByColumnClass.put(Object.class, new MyCellEditorModel1(cellEditors));
    }
    public 
TableCellEditor getCellEditor(int rowint col){
        if(
myCellEditorModel!=null) return myCellEditorModel;
        return 
super.getCellEditor(row,col);
    }
    public 
TableCellRenderer getCellRenderer(int rowint column) {
        
Object value getValueAt(row,column);
        if (
value !=null) {
            return 
getDefaultRenderer(value.getClass());
        }
        return 
super.getCellRenderer(row,column);
    }
    public 
void setCellEditor(MyCellEditorModel anEditor) {
        
myCellEditorModel anEditor;
    }

scusatemi per la lunghezza del messaggio, spero che qualcuno possa risolvere il problema. Grazie in anticipo. Spero di aver postato tutto il codice di cui c'è bisogno per capire l'errore.
Ciao a tutti.