JTABLE, bug no RowSorterListener?

0 respostas
matheusssilva

Bem gente olhem o código abaixo, é uma pequena JTABLE com a função de ordenação de colunas. to querendo implementar ações quando o usuário clicar nas colunas para ordenalas, bem para fazer isso não é segredo para quase ninguém, basta apenas adicionar um RowSorterListener no seu objeto RowSorter, mas olha só que coisa, o código designado para ser executado quando o usuário mandar ordenar as colunas é executado duas vez seguidas :shock:

Isso mesmo, rodem o código e verão que a palavra “teste” é exibida duas vezes.

O que pode está causando isso? será Bug no método?

Grato!

import javax.swing.*;
import javax.swing.event.RowSorterEvent;
import javax.swing.table.*;
import java.awt.*;
import javax.swing.event.RowSorterListener;

   public class SortTable {
     public static void main(String args[]) {
       Runnable runner = new Runnable() {
        public void run() {
           JFrame frame = new JFrame("Ordenando um JTable");
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           Object rows[][] = {
               {"AMZN", "Amazon", 41.28},
               {"EBAY", "eBay", 41.57},
               {"GOOG", "Google", 388.33},
               {"MSFT", "Microsoft", 26.56},
               {"NOK", "Nokia Corp", 17.13},
               {"ORCL", "Oracle Corp.", 12.52},
               {"SUNW", "Sun Microsystems", 3.86},
               {"TWX",  "Time Warner", 17.66},
               {"VOD",  "Vodafone Group", 26.02},
               {"YHOO", "Yahoo!", 37.69}
             };
           String columns[] = {"Sigla", "Nome", "Preço"};
           TableModel model =
               new DefaultTableModel(rows, columns) {
             public Class getColumnClass(int column) {
               Class returnValue;
               if ((column >= 0) && (column < getColumnCount())) {
                 returnValue = getValueAt(0, column).getClass();
               } else {
                 returnValue = Object.class;
               }
               return returnValue;
             }
           };

           JTable table = new JTable(model);
           RowSorter<TableModel> sorter =
             new TableRowSorter<TableModel>(model);

           sorter.addRowSorterListener(new RowSorterListener() {
                    public void sorterChanged(RowSorterEvent e) {
                        System.out.println("teste");
                    }
                });

           table.setRowSorter(sorter);
           JScrollPane pane = new JScrollPane(table);
           frame.add(pane, BorderLayout.CENTER);
           frame.setSize(300, 150);
           frame.setVisible(true);
         }
       };
       EventQueue.invokeLater(runner);
     }
   }
Criado 1 de outubro de 2009
Respostas 0
Participantes 1