Dúvida com JTable - Abstract Table Model e afins

Bom galera, o problema é o seguinte
Implementei alguns AbstractTableModels para as minhas entidades, implementei um formulário único de pesquisa, que pode ser chamado de todos os cadastros (apenas passo o AbstractTableModel para o JTable e está preenchido), cada um é mostrado perfeitamente nos formulários e beleza.
O problema é o seguinte, preciso mudar a forma que implementei pois precisarei de um filtro para a pesquisa das informações.
Por exemplo, no cadastro de Clientes, no formulário de pesquisa, a opção de digitar o código ou o nome do cliente pra fazer a filtragem e retornar para a tela de cadastro o cliente selecionado.
No meio do processo, implementei também uma classe de paginação (Primeiro, Anterior, Próximo e Último) nas telas do cadastro, sendo única a lista que uso em segundo plano na paginação e envio para a tela de pesquisa.

Quando implemento um filtro e dou o “getSelectedRow”, e jogo isso como índice da minha lista, logicamente vai retornar a informação naquele índice e não a informação correta selecionada. Por exemplo: Tenho 10 clientes, com códigos de 1 a 10. Ao pesquisar pelo cliente de código 5, apenas um está no JTable e ao selecioná-lo (getSelectedRow) tenho o cliente no índice 1 da lista.
Gostaria de uma dica de implementação para não ter esse tipo de problema, estou utilizando [color=white]tentando[/color] o pattern MVP…

Exemplo dos códigos:

// Aqui a chamada do método de pesquisa
 @Override
    public void pesquisa()
    {
        try
        {
            this.resetLista();
            //No construtor eu passo o Modelo, a Classe, o label do formulário (putz...) e o presenter atual, para o qual o objeto será retornado...
            new PesquisaPresenter().createView(new ClientesTableModel<Cliente>(Cliente.class), "Nome", this);
        }
........

//Aqui já é no Presenter da pesquisa o retorno do objeto selecionado ESTÁ HORRÍVEL!! eu sei, irei mudar, é que o prazo estava curto hehe

//Não sei porque não chamei o método de "retornaObjetoSelecionado()"
public void updateViewCadastro()
    {
        // Corrigir!
        if (origem instanceof CadastrarEntregaPresenter)
        {
            ((CadastrarEntregaPresenter) origem).setResultPesquisa((Entrega) this.modelo.getObject(view.getLinhaSelecionada()));
        }
        else if (origem instanceof CadastroPresenter)
        {
            ((AbstractPaginacao) origem).setItemAtual(view.getLinhaSelecionada());
            ((AbstractPaginacao) origem).getItemAtual();
        }
        ((PesquisaWindow) view).dispose();

Obrigado antecipadamente pela ajuda!!!

Boa noite GusMcCart.

O seu problema é simples de resolver.

Você não deve retornar o valor do método getSelectedRow() do JTable ou getLinhaSelecionada do seu Objeto, mas sim o conteúdo de um campo que porventura está dentro de um célula (linha, coluna) do seu JTable.

A linha selecionada será apenas como referência da linha da célula. quanto a coluna é você quem deve definir qual delas será passada ao objeto com referência de pesquisa, isto porque a coluna representa o campo da tabela, e conforme está definido o seu JTable, por exemplo, o campo ID do Cliente pode estar na coluna zero (O) do JTable. O método que retorna a célula de um JTable é getValueAt(Linha, coluna).

Assim sendo ficaria mais ou menos assim:

    SeuJTable.getValueAt(SeuJTable.getSelectedRow(), 0);

Supondo que o seu objeto “view” possua um JTable que está encapsulado por um método público “getMeuJTable()” então ficaria mais ou menos assim:

      Integer linhasel = view.getMeuJTable().getSelectedRow();
     ((CadastrarEntregaPresenter) origem).setResultPesquisa((Entrega) this.modelo.getObject(view.getMeuJTable().getValueAt(linhasel, 0));

Espero ter ajudado.

Um abraço.

Pra pegar a linha correta use o método convertRowIndexToModel.

discorpio> Eu imaginei algo assim, o problema é que eu tenho listas contendo meus objetos da camada de modelo dentro da JTable (implementei o toString() e jogo o objeto “diretamente” na JTable). Acredito que a dica do fasts seria mais o que preciso.
fasts> Já li a documentação aqui no tocante ao convertRowIndexToModel.
Muito bom! Acho que era isso que estava precisando. Assim que implementar, dando certo posto a resposta e o exemplo do código!