Problema ao implementar AbstractTableModel

Ola pessoal, estou com problema ao implementar o AbstractTableModel.

Quando executo sai nas linhas do Jtable teste.hiber.Fornecedor@17cec96 ao inves de sair o conteudo da coluna.

Alguem poderia ajudar por favor ??


package teste.hiber;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class fornecedorModel extends AbstractTableModel {
    
     private String[] colunas = new String[] { "Codigo", "Fornecedor" };
     private List<Fornecedor> linhas;
     
     public fornecedorModel(List<Fornecedor> listaDeFornecedor) {  

        linhas = new ArrayList<Fornecedor>(listaDeFornecedor);  

    }
    @Override
    public int getRowCount() {
        return linhas.size();
    }
    @Override
    public int getColumnCount() {
       return colunas.length;
    }
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        
        Fornecedor fornecedor = linhas.get(rowIndex);
        
        return fornecedor;
    }
}

package teste.hiber;

import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable;
import string.frame;
import table.Dao;


public class TestaFornecedorModel {
   
       public static void main(String[] args) {
       frame frame = new frame();
       Dao dao = new Dao();
       List<Fornecedor> linha;
       linha = dao.listar();
       
       fornecedorModel model = new fornecedorModel(linha);
       JTable table = new JTable(model);
       frame.add(table);
       frame.showIt("Teste", 10, 10, 400, 200);
        
    }
}

O problema está na seguinte linha

[code]public Object getValueAt(int rowIndex, int columnIndex) {

    Fornecedor fornecedor = linhas.get(rowIndex);  
      
    return fornecedor;  
}[/code]

você deve fazer algo do tipo(Exemplo um exemplo onde 2 campos são visíveis pelo usuário):

[code]// Pega o sócio referente a linha especificada.
public Object getValueAt(int rowIndex, int columnIndex) {
// Pega o sócio referente a linha especificada.
Fornecedor fornecedor= linhas.get(rowIndex);

    switch (columnIndex) {
    case ID: //coluna 0 representa o ID então retorno o id logo abaixo
        return fornecedor.getId();
    case DESCRICAO: //coluna 1 representa a descricao então retorno a descricao logo abaixo
        return fornecedor.getDescricao();
    default:
        // Não deve ocorrer, pois só existem 2 colunas
        throw new IndexOutOfBoundsException("columnIndex out of bounds");
    }

}[/code]

Veja que cada campo como ID e DESCRICAO que são meus campos de exemplos são representados por constantes exemplo:

private static final int ID = 0; private static final int DESCRICAO = 1;

Amigo, obrigado pela atenção… daqui a pouco e faço isso que vc me orientou… valeu

Amigo, obrigado, deu certo…

Agora queria saber pq nao tá saindo o nome das minhas colunas e ao invés disso tá saindo letras de A em diante.

[quote=douglasmorais]Amigo, obrigado, deu certo…

Agora queria saber pq nao tá saindo o nome das minhas colunas e ao invés disso tá saindo letras de A em diante.[/quote]

Para definir o nome das colunas geralmente uso assim:

// Array com os nomes das colunas. private String[] colunas = new String[] { "Código", "Funcionário", "Idade"};

depois implemento o seguinte método

@Override public String getColumnName(int columnIndex) { return colunas[columnIndex]; };

Da uma conferida nesse post aqui:
http://www.guj.com.br/java/225793-exemplo-de-tablemodel

Valeu, deu certinho

Agora estou tentando pegar uma linha selecionada e esta dando o seguinte erro :

Exception in thread “main” java.lang.ClassCastException: java.lang.String cannot be cast to string.hiber.Fornecedor
at string.hiber.TestaFornecedorModel.main(TestaFornecedorModel.java:32)

o codigo esta aqui :

public class TestaFornecedorModel {
   
       public static void main(String[] args) {
       frame frame = new frame();
       Dao dao = new Dao();
       List<Fornecedor> linha;
       linha = dao.listar();
       
       fornecedorModel model = new fornecedorModel(linha);
       JTable table = new JTable(model);
       JScrollPane scroll = new JScrollPane(table);  
       frame.add(scroll);
       frame.showIt("Teste", 10, 10, 400, 200);
       int linhaSelecionanda = table.getSelectedRow();
       linhaSelecionanda = 3;
       Fornecedor f =   (Fornecedor) table.getValueAt(1, 1);
       System.out.println(f);
        
    }
}

fiz um teste modificando a linha 16 para :

Nesse caso funcionou.

Mas oque eu nao entendo eh pq sou obrigado a usar um objeto String. Nao deveria estar usando o objeto Fornecedor para pegar o conteudo da linha ?

Para pegar a linha selecionado na tabela você utiliza o método:

Vou te passar um tutorial que aprendi a fazer por ele
http://devsv.wordpress.com/2012/07/08/como-implementar-um-tablemodel/

Procure por Criando métodos para manipular os dados.

No método getSocio você manda um parametro que é o mesmo que te informei acima para pegar o seu objeto que no caso dele é do tipo Socio.

SeuObjeto objeto = seuModeloDeTabela.getSocio(suaTabela.getSelectedRow());

Flw!

Cara, obrigado mesmo.

Para pegar a coluna eu entendi, uso getSelectedRow().

Agora como faz pro metodo getValueAt retornar o objeto Fornecedor ao inves de retornar a String ( ou o Int ) de cada coluna ?

Daqui a pouco eu dou uma conferida no link que vc indicou.

No último exemplo eu falei isso, olha ai que você entende.

Valeu… deu certo !