Sorter JTable a zmiany modelu tabeli

0

Witam, mam problem z sorterem JTable. W mojej JTabeli używam własnego modelu danych. Chciałbym móc posortować JTabelę w taki sposób, żeby zmiany nie tyczyły się tylko prezentacji JTabeli, ale również żeby powodowały zmiany w kolejności wierszy w tabeli znajduje się w modelu danych i na podstawie której rysowana jest JTabela. Niestety domyślny sorter JTabeli powoduje zmiany jedynie w prezentacji JTabeli, a nie w samym modelu. Wiem, że można stworzyć własny sorter ale chyba nie tego mi potrzeba. Chciałbym, żeby po kliknięciu na nazwę kolumny (aby posortować wiersze według tej kolumny) wywoływana była metoda która nie tyle ułoży widok JTabeli, ale pozmienia trochę tabelę z modelu danych na podstawie której rysowana jest JTabela. Uff... wiem, że to trochę zagmatwane, ale jeśli ktoś ma jakiś pomysł jak to zrobić to bardzo proszę o pomoc bo sam nad tym myślę i myślę i nic wymyślić nie mogę. Z góry dzięki za wszystkie wskazówki i podpowiedzi.

0

Na pewno musisz sortować model? Może wystarczy metoda convertRowIndexToModel().

0

No właśnie posortowanie modelu jest niezbędne. Mógłbym użyć convertRowIndexToModel(), ale wtedy musiałbym napisać metodę która uruchamiałaby się kiedy użytkownik klikną by na nagłówek JTabeli w celu posortowania, a nie mam pojęcia jak wykryć to kliknięcie na nagłówek.

0

Ja bym spróbował metody addRowSorterListener().

0

Dokładnie o to mi chodziło. Tylko pojawił się kolejny mały problem, mam coś takiego:

 
TableModel model=new modelTabeli(baza.zwróćNazwyKolumn(wybranaBaza, wybranaTabela),baza.zwróćWartościTabeli(wybranaBaza, wybranaTabela));
		JTable tabela=new JTable(model);
		tabela.setFillsViewportHeight(true);
		
		RowSorter<TableModel> sorter=new TableRowSorter<TableModel>(model);
		sorter.addRowSorterListener(new RowSorterListener()
		{
			public void sorterChanged(RowSorterEvent e)
			{
				System.out.println("SORTER");
			}
		});
			
		tabela.setRowSorter(sorter);

Problem polega na tym, że kiedy klikam na kolumnę żeby posortować sobie wiersze to słowo "SORTER" pojawia się w konsoli dwa razy zamiast jednego razu. Czy ktoś wie czemu?

0

Domyślam się że trzeba wywołać metodę removeRowSorterListener() na rzecz sortera aby usunąć domyślnego słuchacza. Wie ktoś ktoś jaki parametr dać w removeRowSorterListener(), żeby usunąć tego słuchacza?

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