Newsgroup: it.comp.java
Titolo: SortTable e AbstractTableModel

Ho letto sul sito sun come implementare il sort di una JTable.
Ora tutto funziona molto egregagiamente fino a che non ripopolo la jtable
(refresh from db).
SortTable sort= new SortTable(myAbstractModel);
Jtable table= new JTable();
table.setModel(sort);
Il metodo di refreshDb si trova dentro myAbstractModel ed esegue una nuova
ripopolazione della tabella (dove tra l'altro faccio un
table.fireChangeXXX).
Tuttavia a video non ho il refresh.Devo muovere qualcosa per avere il
refresh.
Se tolto la parte del sort, e quindi il model rimane myAbstractModel invece
tutto funziona bene.
Che cosa devo fare per avere una tabella ordinabile ma dove funzioni anche
il refresh??
Voi che cosa usate per ordinare la tabella con il click sull'intestazione?
Gabri

 Voi che cosa usate per ordinare la tabella con il click sull'intestazione?
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#sorting
Ciao.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Io utilizzo proprio questo codice per il sort:
TableSorter sorter = new TableSorter(new MyTableModel()); //ADDED THIS
//JTable table = new JTable(sorter);             //NON UTILIZZO QUESTO
BENSI:
setModel(sorter);
sorter.setTableHeader(table.getTableHeader()); //ADDED THIS
Faccio quella modifica perchè una ulteriore classe che estende JTable
generica che si aggancia al model.
Ma penso che sia equivalente.
MyTableModel è una implementazione della AbstracrtTableModel.
Il refreshDb è dentro il MyTableModel.
In soldoni pulisce il vector che gestisce le righe della table e quindi lo
riempe da rs:
 // Now get information for each row
   while (resultSet.next()) {
    rows++;
    Vector newRow = new Vector();
    for (int i = 1; i <= getColumnCount(); i++) {
    newRow.addElement(resultSet.getObject(i));
    }
    data.addElement(newRow);
   }
   fireTableChanged(null); // Tell the listeners a new table has arrived.
<------
   } catch (SQLException exp) {.....
Ora se non c'è il sort applicato (quindi non uso le 3 righe relative al
sort) tutto funziona bene.
Se invece uso il sort ed ho eseguito un sorting delle colonne questo refresh
non va, nel senso che a video ho un aggiornamento solo se muovo il mouse.
Non c'è altro codice per quanto riguarda questa il refresh.
Dove è il problema?

 sorter.setTableHeader(table.getTableHeader()); //ADDED THIS
Ho provato il TableSorter (che io avevo, fra l'altro, in una versione
molto vecchia e piena di bachi, mentre adesso va che è una bellezza...).
A me funziona.
Il tuo problema potrebbe essere che ti riferisci a due JTable diverse.
O usi questo:
table.setModel(sorter);
sorter.setTableHeader(table.getTableHeader());
O usi questo:
setModel(sorter);
sorter.setTableHeader(getTableHeader());
Prova e sappimi dire...



Correggo: uso questo.
Non ho due tabelle.
Ho una classe che estende JTable che al suo interno si aggancia con il model
in fase di costruzione.
Dopo di che creo il sort ed utilizzo il metodo sopra.
poi il refreshfromDb lavora sul primo model.

> A me funziona.
Mi posti il codice di prova?


Ho risolto.
L'errore era qui:
fireTableChanged(new TableModelEvent(this));
prima utilizzavo
fireTableChanged(null); e il sort andava in errore.
Francamente non so bene che cosa scriverci in quell'evento ma con la prima
riga va.
Grazie