Hallo,
in einem Programm verwende ich einen JTable. Diesen möchte ich auch sortieren können. Nun habe ich mich etwas belesen und herausgefunden, dass man die Tabelle mit "setAutoCreateRowSorter(true)" automatisch sortieren lassen kann, wenn man auf den Spalten-Header klickt.
Mein Problem ist, dass ich nach dem sortieren noch eine andere, eigens geschriebene Methode aufrufen möchte. Ich bin mir unsicher, wie ich dieses Problem angehen soll.
Eine Idee, die ich bisher hatte, war einen eigenen 'sorter' für das Sortieren zu definieren und meine Methode aus meinem 'Comparator' aufzurufen. Erstens erscheint mir dies jedoch nicht als die beste Lösung zu sein, da dies die Methode ja dann nicht nach dem sortieren aufruft, sonder immer wieder währenddessen und außerdem habe ich es trotz mehrfacher Versuche nicht geschafft diese Idee zum Laufen zu bringen. Unten mal ein Code-Ausschnitt, der hoffentlich verdeutlicht, was ich versucht habe:
Um es noch mal zusammen zu fassen: Ich suche also nach einer Möglichkeit, eine Methode aufzurufen, nachdem der Benutzer die Tabelle durch klicken auf einen Spalten-Header sortiert hat. Hättet ihr da Ideen?
Vielen Dank im Voraus!
MfG,
Jocbe
in einem Programm verwende ich einen JTable. Diesen möchte ich auch sortieren können. Nun habe ich mich etwas belesen und herausgefunden, dass man die Tabelle mit "setAutoCreateRowSorter(true)" automatisch sortieren lassen kann, wenn man auf den Spalten-Header klickt.
Mein Problem ist, dass ich nach dem sortieren noch eine andere, eigens geschriebene Methode aufrufen möchte. Ich bin mir unsicher, wie ich dieses Problem angehen soll.
Eine Idee, die ich bisher hatte, war einen eigenen 'sorter' für das Sortieren zu definieren und meine Methode aus meinem 'Comparator' aufzurufen. Erstens erscheint mir dies jedoch nicht als die beste Lösung zu sein, da dies die Methode ja dann nicht nach dem sortieren aufruft, sonder immer wieder währenddessen und außerdem habe ich es trotz mehrfacher Versuche nicht geschafft diese Idee zum Laufen zu bringen. Unten mal ein Code-Ausschnitt, der hoffentlich verdeutlicht, was ich versucht habe:
Java:
mTab = new JTable(new MyTableModel("Please select data", "Data will appear here"));
mTabModel = (MyTableModel)mTab.getModel();
TableRowSorter<MyTableModel> sorter = new TableRowSorter<MyTableModel>(mTabModel);
Comparator<String> strComp = new Comparator<String>() {
public int compare(String s1, String s2) {
String[] strings1 = s1.split("\\s");
String[] strings2 = s2.split("\\s");
System.out.println("text"); //wenn es funktionieren würde, müsste ich diesen Text eigentlich ausgegeben sehen, wann immer ich sortiere. Der Text wird jedoch nicht ausgegeben. Ich vermute, es wird ein standard-comparator verwendet.
int tst = 4/0; //und wenn dieser comparator verwendet würde, müsste spätestens hier ja eigentlich ein Fehler auftreten. Die Tabelle lässt sich jedoch fehlerlos sortieren.
return strings1[strings1.length - 1].compareTo(strings2[strings2.length - 1]);
}
};
sorter.setComparator(0, strComp);
mTab.setRowSorter(sorter);
Um es noch mal zusammen zu fassen: Ich suche also nach einer Möglichkeit, eine Methode aufzurufen, nachdem der Benutzer die Tabelle durch klicken auf einen Spalten-Header sortiert hat. Hättet ihr da Ideen?
Vielen Dank im Voraus!
MfG,
Jocbe