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
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.