L'unico modo per ordinare i dati, indipendentemente dalla fonte, è quello di caricarli in un array privato. Indi per cui creare un'apposita funzione di ordinamento, in base alle proprie esigenze. Ricordo che è possibile intercettare il click sulla testata di oggetto (es. TableView), per selezionare la colonna.
Io avevo usato un metodo, ovvero mi salvavo i dati un array Object[] (o una array di oggetti creati ad-hoc), poi mantenevo nel Tag dell'oggetto lista (o grilia) il tipo dell'ultimo ordinamento (es. D=desc, A=asc) e il numero di colonna a cui si riferiva l'ordinamento. Tramite questi parametri, quando cliccavo su una colonna, chiamavo la mia funzione di ordinamento, determinavo i precedenti parametri di ordinamento, quindi eseguivo l'operazione inversa. Una volta ordinato l'array, ripopolavo la lista e salvavo nuovamento i parametri di ordinamento.