2009-06-12 8 views
3

J'ai un JTable et un TableRowSorter que je souhaite effectuer une opération après un tri est terminé. J'ai parcouru le net, et jusqu'ici je n'ai pas eu beaucoup de chance.Exécution d'une action après une opération RowSort

Initialement, je pensais qu'un simple RowSorterListener ferait l'affaire, mais malheureusement, il n'effectue pas l'opération une fois le tri terminé.

Ajout d'un MouseListener à l'en-tête JTable pourrait fonctionner, mais la solution n'est pas très élégante.

Quelqu'un a-t-il des idées?

Merci beaucoup!


Modifier (de commentaire): Il est ajouté dans un procédé à l'intérieur d'une classe personnalisée TableModel qui se prolonge AbstractTableModel. Cette méthode est invoquée chaque fois que JTable est défini/spécifié dans la classe personnalisée TableModel.

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

'RowSorterListener' devrait fonctionner. pouvez-vous montrer comment vous ajoutez RowSorterListener et l'implémentation de votre méthode 'sorterChanged'? – akf

+0

Akf, merci pour votre aide. Ce qui suit est ajouté dans une méthode à l'intérieur d'une classe 'TableModel' personnalisée qui étend' AbstractTableModel'. Cette méthode est invoquée chaque fois que 'JTable' est défini/spécifié dans la classe personnalisée' TableModel'.

 sorter.addRowSorterListener(new RowSorterListener() { @Override public void sorterChanged(RowSorterEvent rowsorterevent) { rebuildMItems(); // The method which executes } }); 
Rien de bien excitant cependant: P –

+0

Oups, on dirait que la mise en forme a mal tourné. Pouvez-vous dire que je suis nouveau sur Stack Overflow? :) –

Répondre

3

Deux possibilités:

  1. Je vois que vous avez une coutume RowSorter. Ne pourriez-vous pas simplement ajouter un appel à votre opération à la fin de la méthode sort()?

    En d'autres termes, pouvez-vous ajouter ceci:

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

    à votre trieuse?

  2. Votre méthode actuelle (le faire dans un RowSorterListener) effectue l'opération deux fois: une fois pour SORT_ORDER_CHANGED et une fois pour SORTED. Pouvez-vous vérifier le type de l'événement et seulement effectuer l'opération à l'heure exacte?

+0

Parfait. Merci à un groupe de mmyers! –

Questions connexes