Sì, penso di aver capito come funziona....e ho implementato così la classe del tableModel che ha un metodo di ricerca:
codice:
class SimpleTableModel extends AbstractTableModel{
//Intestazione delle colonne
String[] columnNames = {"Nome", "Telefono"};
private ArrayList<Contact> contatti;
private ArrayList<Contact> resultContatti;
public SimpleTableModel(ArrayList<Contact> contatti) {
this.contatti = contatti;
resultContatti = new ArrayList<Contact>();
search2(""); // search fittizio per setup iniziale
}
//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 row, int col) {
//Seleziona il contatto
Contact c = contatti.get(row);
switch (col){
case 0: return c.getName();
case 1: return c.getTel();
}
return null;
}
// ritorna il nome della colonna
@Override
public String getColumnName(int col) {
return columnNames[col];
}
// 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));
}
fireTableDataChanged();
}
else{
for (int i = 0; i < contatti.size(); i++) {
if (contatti.get(i).getName().toLowerCase().contains(searchString.toLowerCase())) {
resultContatti.add(contatti.get(i));
}
fireTableDataChanged();
}
}
}
}
E ho gestito gli eventi sulla textfield dove viene inserita la parola o le lettere da cercare.
Gli eventi sono ascoltati...ma la tableModel non viene aggiornata...forse sbaglio il fireTableDataChanged()?