JTable - sortowanie wierszy z poz. kodu

0

kilka kwestii:

  1. Czy da się (jak) wyłapać aktywację sortowania według jakiejś kolumny (kiedy klikamy na nagłówek kolumny)?
  2. Czy da się zapisać do jakiejś zmiennej informację względem której kolumny zostało wykonane sortowanie (czy rosnąco czy malejąco)?
  3. Czy można jakoś w kodzie programu uaktywnić sortowanie względem określonej przez nas kolumny?

Chciałbym to wykorzystać do takiej sytuacji, gdzie mamy posortowane wiersze względem np kolumny "Imię" i po usunięciu jakiegoś wiersza kiedy "odświeżamy" dane w tabeli (robię to poprzez: tableModel.setDataVector(daneTabeli, columnNames);) owe sortowanie pozostało...
obecnie nie pozostaje, bo setDataVector() "resetuje" całą zawartość tabeli i wyświetla to w takim stanie jak na początku stworzenia tabeli

odnośnie ad2. można iść na prostotę i stworzyć jakieś prowizoryczne zmienne które przechowają info o kolumnie względem której odbyło się sortowanie i czy rosnąco czy malejąco ale i tak pozostaje pyt 1., gdzie umieścić w kodzie wyłapanie tego zdarzenia
poprzez zdarzenia myszy nie chcę tego robić bo to lamerskie... ;P i tylko by obciążało niepotrzebnie kompa kiedy będziemy klikać po całym oknie aplikacji
a nawet jeśli jakoś to się uda zrobić to mamy 3. pytanie :]

może ktoś coś wymyśli...

0

ad 1... tu się przydaje JTableHeader:

import javax.swing.table.JTableHeader;

JTableHeader th = NaszaTabela.getTableHeader();

th.addMouseListener(new MouseAdapter(){
	public void mouseClicked(MouseEvent e){
		TableColumnModel columnModel = tabela.getColumnModel();
 		int viewColumn = columnModel.getColumnIndexAtX(e.getX());
		int column = tabela.convertColumnIndexToModel(viewColumn);
		if (e.getClickCount() == 1 && column != -1) {
			//System.out.println("Sorting ...");
			//tu możemy do jakichś naszych zmiennych zapisać, że sortowanie nastąpiło, np:
			kolumnaSortowana = column;
			kierunekSortowania = !kierunekSortowania;//zmieniamy z rosnąco na malejąco i odwrotnie
		}
	}
});

więc jakoś to można wyłapać... ale z uaktywnieniem sortowania z poziomu kodu jest już gorzej...
trzeba by tu utworzyć coś własnego co by się zajmowało sortowaniem... a to chyba już nie na mój łeb ;p albo mam już dosyć i dalej mi się myśleć nie chce, coś z grubsza podałem poniżej:

import javax.swing.table.TableRowSorter;

TableRowSorter trs = new TableRowSorter();
trs.setModel(NaszaTabela.getModel());
trs.setSortable(2, true);

info wyciągnięte z http://www.informit.com/guides/content.aspx?g=java&seqNum=57&rl=1

może ktoś rozwinie adnotacje do 3 pytanka... jakiś przykładzik cy cuś ;)

0

ad 3.
rozwiązanie znalazłem tutaj: http://forum.java.sun.com/thread.jspa?threadID=5140367&messageID=9515962
niestety trzeba mieć własny komparator (tak jak tam jest) ale w końcu rozwiązanie jest gotowe...

jak się wszystko połączy to można zrobić to co chciałem

PS nie ma to jak odpowiedzieć samemu sobie na posta ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1