Abstracttable model sort

0 respostas
jonasjgs2

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

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();

    }
}
Criado 16 de janeiro de 2013
Respostas 0
Participantes 1