Ok. Ho implementato il mio TableModel:

codice:
class SimpleTableModel extends AbstractTableModel{
      //Intestazione delle colonne
      String[] columnNames = {"Nome", "Telefono"};
      private ArrayList<Contact> contatti;

        public SimpleTableModel(ArrayList<Contact> contatti) {
            this.contatti = contatti;
        }

        //Numero di righe uguale alla dimensione dell'ArrayList
        public int getRowCount() {
            return contatti.size();
        }

        //Numero di colonne
        public int getColumnCount() {
            return columnNames.length;
        }

        //Ritorno il contenuto di una cella
        public Object getValueAt(int rowIndex, int columnIndex) {
            //Seleziona il contatto
            Contact c = (Contact)contatti.get(rowIndex);
            String val = null;
            switch (columnIndex){
                case 0: val = c.getName();
                case 1: val = c.getTel();
                break;
                default: val = "";
            }
            return val;
        }

        // ritorna il nome della colonna
        @Override
        public String getColumnName(int col) {
            return columnNames[col];
        }
}
Ora provo ad associare questo tableModel ad una jtable.
E poi devo implementare i metodi di ricerca che aggiornano subito la jtable.

Se qualcuno gli dà un'occhiata mi può dire se ci sono errori evidenti?