I fireXXX a disposizione per questo oggetto sono:

1. fireTableStructureChanged()
2. fireTableRowsInserted()
3. fireTableRowsUpdated(int firstRow,int lastRow)
4. fireTableRowsDeleted(int firstRow,int lastRow)
5. fireTableCellUpdated(int firstRow,int lastRow)
6. fireTableChanged(TableModelEvent e)
7. fireTableDataChanged()

Per 'intuizione' credo che 1,2 e 4 non facciano al mio caso.

Il 7 fa questo:

Notifies all listeners that all cell values in the table's rows may have changed. The number of rows may also have changed and the JTable should redraw the table from scratch. The structure of the table (as in the order of the columns) is assumed to be the same.
Ma l'ho provato e non funziona.

Ora ho provato il 3 che fa:
Notifies all listeners that rows in the range [firstRow, lastRow], inclusive, have been updated.
Quindi ho scritto così il metodo search:

codice:
 // Metodo custom per eseguire la ricerca
        public void search2(String searchString) {
            resultContatti.clear();
            if(searchString.equals("")){
                for(int i = 0; i < contatti.size() ; i++){
                    resultContatti.add(contatti.get(i));
                }

                fireTableRowsUpdated(0, resultContatti.size()-1);

            }
            else{
                for (int i = 0; i < contatti.size(); i++) {
                    if (contatti.get(i).getName().toLowerCase().contains(searchString.toLowerCase())) {
                            resultContatti.add(contatti.get(i));
                    }
                    fireTableRowsUpdated(0, resultContatti.size()-1);
                }  
            }
        }
Ma non vedo nessun effetto sulla tabella, cioè non la vedo aggiornare mentre effettuo la ricerca.

Ora provo gli altri..ma fin qua ho posso aver sbagliato qualcosa?