Abstracttable model sort

eu peguei alguns exemplos de abstracttabelmodel e fiz um para atender as minhas necessidades…
o codigo fonte dele esta abaixo…
na aplicacao que utiliza a tabela eu atribuo um sort para o tabelmodel
TabMenu.setRowSorter(new TableRowSorter(menutablemodel));

ate ai tudo funciona muito bem…
da o sort nas colunas e beleza
o problema e que quando eu pego a linha selecionada e executo
o get da tabela da linha apos o sort o List nao esta ordenado conforme a tabela…

linhaselecionada = TabMenu.getSelectedRow(); //retorna a linha selecionada corretamente

menutablemodel.get(linhaselecionada) // porem nao pega a linha conforma a selecao da tabela porque o list nao ordenado

ou seja nao retorna a linha desejada…
alguem tem alguma solucao para isso

[code]import java.util.List;
import javax.swing.table.AbstractTableModel;

public class MenuTableModel extends AbstractTableModel {

private static final int COL_TIPO = 0;
private static final int COL_DESCRICAO = 1;
private static final int COL_MODULO = 2;
private static final int COL_SEQ = 3;
private List<Menu> valores;

//Esse é um construtor, que recebe a nossa lista de livros
public MenuTableModel(List<Menu> valores) {
    this.valores = valores;

}

@Override
public int getRowCount() {
    //Quantas linhas tem sua tabela? Uma para cada item da lista.
    return valores.size();
}

@Override
public int getColumnCount() {
    //Quantas colunas tem a tabela? Nesse exemplo, só 2.
    return 4;
}

@Override
public String getColumnName(int column) {
    //Qual é o nome das nossas colunas?
    if (column == COL_TIPO) {
        return "Tipo";
    }
    if (column == COL_DESCRICAO) {
        return "Descrição";
    }
    if (column == COL_MODULO) {
        return "Módulo";
    }
    if (column == COL_SEQ) {
        return "Seq";
    }
    return ""; //Nunca deve ocorrer
}

@Override
public Object getValueAt(int row, int column) {
    //Precisamos retornar o valor da coluna column e da linha row.
    Menu menu = valores.get(row);
    if (column == COL_TIPO) {
        return menu.getTipo();
    } else if (column == COL_DESCRICAO) {
        return menu.getDescricao();
    } else if (column == COL_MODULO) {
        return menu.getModulo();
    } else if (column == COL_SEQ) {
        return menu.getSeq();
    }
    return ""; //Nunca deve ocorrer
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    Menu menu = valores.get(rowIndex);
    //Vamos alterar o valor da coluna columnIndex na linha rowIndex com o valor aValue passado no parâmetro.
    //Note que vc poderia alterar 2 campos ao invés de um só.
    if (columnIndex == COL_TIPO) {
        menu.setTipo(aValue.toString());
    } else if (columnIndex == COL_DESCRICAO) {
        menu.setDescricao(aValue.toString());
    } else if (columnIndex == COL_MODULO) {
        menu.setModulo(aValue.toString());
    } else if (columnIndex == COL_SEQ) {
        menu.setSeq(aValue.toString());
    }
}

@Override
public Class<?> getColumnClass(int columnIndex) {
    //Qual a classe das nossas colunas? Como estamos exibindo texto, é string.
    return String.class;
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
    //Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa tabela toda é.
    return false;
}
//Já que esse tableModel é de livros, vamos fazer um get que retorne um livro inteiro.
//Isso elimina a necessidade de chamar o getValueAt() nas telas. 

public Menu get(int row) {
    return valores.get(row);
}

public void addLinha(Menu Menu) {
    // Adiciona o registro.
    valores.add(Menu);

    // Pega a quantidade de registros e subtrai 1 para
    // achar o último índice. A subtração é necessária
    // porque os índices começam em zero.
    int ultimoIndice = getRowCount() - 1;

    // Notifica a mudança.
    fireTableRowsInserted(ultimoIndice, ultimoIndice);
}

public void remontar(List<Menu> valores) {

    this.valores = valores;
    fireTableDataChanged();

}

}[/code]