Olá pessoal, programando uma JTable, depois de muitos dias sem, fiz um ModeloTabela para preencher minha JTable. O problema é que estou utilizando o getColumName() pra poder nomear minha colunas e passando para ele um Array de Strings… só que ao executar o programa ele está me retornando apenas A,B,C… etc… alguém imagina o que posso estar esquecendo ?? antes dava certo… To sem Net em casa e por isso tá difícil colar o código aqui do trampo, mas vou dar um jeito e trazer o Codigo aqui pra vocês darem uma olhada, mas se só a descrição alguém já souber o que estou esquecendo irei ficar agradecido.
Att.
Adriano M. Ohana
É, só com o código mesmo.
Geralmente é erro do model.
nao entendi… os titulos das colunas estão aparecendo normalmente quando vc roda o sistema?
sem o codigo é dificil msm…
Fala pessoal… depois de algumas semanas longe cá estou eu de novo com Internet disponível… pois é… voltando ao problema… aqui está meu código…
[code]// AUTOR: Adriano Ohana
// DATA : 25/07/2008
package house.visao.modelo;
import house.modelo.UsuarioVO;
import javax.swing.table.AbstractTableModel;
import house.controle.interfaces.UsuarioFacade;
import house.facadefactory.FacadeFactory;
import house.util.SistemaException;
import java.util.Vector;
public class ModeloTabelaUsuario extends AbstractTableModel {
private Vector tudo = new Vector();
private Vector valores = new Vector();
private String colunas [] = new String[] {"Cod","Nome","Login"};
UsuarioVO vo = new UsuarioVO();
UsuarioFacade facade = FacadeFactory.getUsuarioFacade();
public ModeloTabelaUsuario() {
try {
tudo.addAll(facade.listar());
} catch (SistemaException e) {
e.printStackTrace();
}
valores.addAll(tudo);
}
public String getColumName(int arg0) {
return colunas[arg0];
}
public int getRowCount() {
return valores.size();
}
public int getColumnCount() {
return colunas.length;
}
// método que mostra os campos preenchidos na tabela
public Object getValueAt(int rowIndex, int columnIndex) {
UsuarioVO voLoc = (UsuarioVO) valores.get(rowIndex);
switch(columnIndex){
case 0:
return voLoc.getIdusuario();
case 1:
return voLoc.getNome();
case 2:
return voLoc.getLogin();
default:
return null;
}
}
public void excluirUsuario(int rowIndex) throws SistemaException{
UsuarioVO voLoc = (UsuarioVO) valores.get(rowIndex);
facade.excluir(voLoc);
}
public UsuarioVO retornaSelecionado(int rowIndex) throws SistemaException {
UsuarioVO voLoc = (UsuarioVO) valores.get(rowIndex);
return voLoc;
}
}
[/code]
Essa criancinha aí que não mostra o Nome da coluna… o que estou esquecendo ???
Segue uma figura para mostrar o que ocorre…
Att.
Oi, posta o código de onde vc cria a tabela também.
Outra coisa, prefira List/ArrayList ao Vector. O Vector não é recomendado desde o Java 1.2. Se quiser ver como usa o ArrayList, é só ver esse exemplo:
http://www.guj.com.br/posts/list/74068.java#389435
Finalmente, postei recentemente umas classes bem práticas para se trabalhar com JTable, dê uma olhada:
http://www.guj.com.br/posts/list/100793.java
Seu erro é o seguinte, o método getColumnName está escrito errado. Existe um n depois do m da palavra column.
Para evitar problemas desse tipo, sempre adicione a tag @Override antes dos métodos sobrescritos. Se você tivesse feito isso, o Java já teria avisado que não existe nenhum método getColumName na classe superior.
Isso é especialmente útil se vc renomear um método da classe base. Assim vc não corre o risco de esquecer de renomear também o método nas classes filhas, já que vai dar erro de compilação.
Valew Viny… funcionou perfeitamente…
Uma pergunta: o @Override é um recurso de que ?? da JVM ou da IDE ?? fiquei meio na dúvida de como funciona… outra, se existe esse recurso para métodos sobrescritos, pode haver para outras coisas também… devo procurar pelo que ??
Valew
O @Override é um recurso chamado Annotations, da própria linguagem Java.
No caso, quem verifica esse anotação é o próprio compilador. O erro é barrado antes sequer do .class ser gerado. Com o @Override, você está dizendo para o compilador “esse método esta sobrescrevendo outro.” O compilador então verifica se isso que vc disse é verdade, e reclama caso não seja.
Esse recurso está disponível a partir do Java 5. Dá uma olhada em:
http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html
Uma lista completa pode ser obtida aqui. O Java 5 introduziu recursos muito importantes como esse e o Generics. (chego a dizer que é um divisor de águas na linguagem java):
http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html
Várias outras APIs possuem annotations. Ë o caso do JUnit, que permite que vc marque os métodos que serão usados como @Test. Ou do Hibernate, que permite que vc mapeie suas classes para o BD através de anotações especiais.