2009-06-12 2 views
3

Ich habe eine JTable und eine TableRowSorter, die ich eine Operation durchführen möchte nach eine Sortierung ist abgeschlossen. Ich habe im Netz gestöbert und bisher hatte ich nicht viel Glück.Ausführen einer Aktion nach einer RowSort-Operation

Anfangs dachte ich, nur ein RowSorterListener würde den Trick machen, aber leider führt es die Operation nicht durch, nachdem die Sortierung beendet ist.

Hinzufügen einer MouseListener an die JTable Header könnte funktionieren, aber die Lösung ist nicht sehr elegant.

Hat jemand irgendwelche Ideen?

Vielen Dank!


bearbeitet (von Kommentaren): Das folgende ist in einem Verfahren in einer benutzerdefinierten TableModel Klasse hinzugefügt, die AbstractTableModel erstreckt. Diese Methode wird immer dann aufgerufen, wenn JTable in der benutzerdefinierten Klasse TableModel festgelegt/angegeben ist.

sorter.addRowSorterListener(new RowSorterListener() { 
    @Override public void sorterChanged(RowSorterEvent rowsorterevent) { 
     rebuildMItems(); // The method which executes 
    } 
}); 
+0

'RowSorterListener' sollte funktionieren. Können Sie zeigen, wie Sie den RowSorterListener und die Implementierung Ihrer 'sorterChanged' Methode hinzufügen? – akf

+0

Akf, danke für deine Hilfe. Das folgende wird in einer Methode innerhalb einer benutzerdefinierten 'TableModel' Klasse hinzugefügt, die' AbstractTableModel' erweitert. Diese Methode wird aufgerufen, wenn die 'JTable' in der benutzerdefinierten 'TableModel'-Klasse festgelegt/angegeben wird.

 sorter.addRowSorterListener(new RowSorterListener() { @Override public void sorterChanged(RowSorterEvent rowsorterevent) { rebuildMItems(); // The method which executes } }); 
Nichts zu aufregend, obwohl: P –

+0

Hoppla, sieht aus wie die Formatierung ging schief dort. Kannst du mir sagen, dass ich neu bei Stack Overflow bin? :) –

Antwort

3

Zwei Möglichkeiten:

  1. Ich sehe Sie RowSorter eine benutzerdefinierte haben. Könnten Sie Ihrer Operation am Ende der Methode sort() nicht einfach einen Anruf hinzufügen?

    Mit anderen Worten, können Sie hinzufügen:

    @Override 
    public void sort() { 
        super.sort(); 
        doSomethingAfterSortingIsDone(); 
    } 
    

    zu Ihrem Sortierer?

  2. Ihre aktuelle Methode (tut es in einem RowSorterListener) zweimal die Operation durchführt: einmal für SORT_ORDER_CHANGED und einmal für SORTED. Können Sie die type der Veranstaltung überprüfen und die Operation nur zur richtigen Zeit durchführen?

+0

Perfekt. Danke ein paar mmyers! –