GARANTIR DESCONTO

Fórum Preencher uma JTable com ArrayList #565978

09/04/2009

0

Bom dia Pessoal, Sou iniciante em JAVA, e estou tomando um laço para preencher uma simples JTable com um ArrayList que contém os resultados de uma busca que fiz no banco. Estou utlizando como IDE o NetBeans e montei a tela colocando uma JTable no Jframe direto (apenas para vcs saberem). Já li que tenho que fazer isto usando a interface DefaultTableModel, mas minha primeira pergunta é? Como pegar o modelo desta table? Usando o código abaixo esta retornando o erro que: non-static variable tbClientes cannot be referenced from a satic context.
 public static void carregaTable(){
        ClienteDAO dao = new ClienteDAO();
        
        DefaultTableModel modelo = (DefaultTableModel)tbClientes.getModel(); 
        
        ArrayList array = new ArrayList();
        array.add(dao.consultaTodos());       
        
    }
Minha segunda dúvida, depois que a primeira for resolvida é como aplicar o Array ao modelo da JTable... Abraço!
Sergio Júnior

Sergio Júnior

Responder

Posts

09/04/2009

Edney Imme

[quote="sergiojunior"]Bom dia Pessoal,
 public static void carregaTable(){
        ClienteDAO dao = new ClienteDAO();
        
        DefaultTableModel modelo = (DefaultTableModel)tbClientes.getModel(); 
        
        ArrayList array = new ArrayList();
        array.add(dao.consultaTodos());       
        
    }
Ola. Vamos por partes:) Vc ja olhou a documentacao do ArrayList pra ver como funciona??? Primeiro, que tipo de dado dao.consultaTodos() retorna? se ja for um arrayList vc pode fazer assim ArrayList array = dao.consultaTodos(); vc somente chamara o ADD qdo deseja adicionar um elemento ao array ja existente. qto a proxima pergunta, veja na documentacao do jtable. por que desconheco...... nunca trabalhei com isso.
Responder

Gostei + 0

09/04/2009

Edney Imme

Oi... bom primeiramente vc vai tenque criar um novo DefaultTableModel e setar para a sua JTable e depois apenas trabalhar com o modelo para inserir deletar ou atualizar os dados da tabela, tipo: <code> DefaultTableModel modelo = new DefaultTableModel(); JTable tabela = new JTable(modelo); modelo.insertRow(ArrayList); ........... </code>
Responder

Gostei + 0

09/04/2009

Sergio_junior

Yargo, Você esta certo, o metodo consultaTodos() retorna um Array, já modifiquei o código. Valeu, Jon, quanto ao modelo, entendi... só nao sei como passar o modelo criado para a minha table que já foi instanciada, pois estou usando o NetBeans e já coloquei a JTable no form... Entao minha duvida fica em como atrelar o modelo criado a uma JTable ja instanciada, ou capturar o modelo dessa table... Valeu,
Responder

Gostei + 0

09/04/2009

Edney Imme

É só vc fazer: tabela.setModel() e passar o novo modelo......
Responder

Gostei + 0

09/04/2009

Michael Santos

Sergio, Se você quer trabalhar com seu modelo de objetos, o melhor é usar uma solução de binding como o [url=https://genesis.dev.java.net]genesis[/url]. Você popularia sua JTable assim:
@Form
public class MeuForm {
   private List minhaLista;

   @DataProvider(widgetName="nameTabela")
   public List populaTabela() {
      return minhaLista;
   }
}
E você teria acesso a variável onde quer que precisasse.
Responder

Gostei + 0

09/04/2009

Sergio_junior

OK! Mas existe uma forma de eu passar o Array para o modelo neh? Agora eu encasquetei com isto... hehe Valeu,
Responder

Gostei + 0

09/04/2009

Edney Imme

[quote="sergiojunior"]Mas existe uma forma de eu passar o Array para o modelo neh?
De um ArrayList, sim. Veja [url=https://genesis.dev.java.net/nonav/3.0-RC2/maven-site/multiproject/genesis-client/xref/net/java/dev/genesis/ui/swing/components/JTableComponentBinder.html#171]aqui[/url].
Responder

Gostei + 0

09/04/2009

Edney Imme

Beleza, Mas não entendi o último for deste código.
 for (Iterator iter = array.iterator(); iter.hasNext(); i++) {
            Object bean = iter.next();
            
            for (int j = 0; j < modelo.getColumnCount(); j++) {
                column = this.tbClientes.getColumnModel().getColumn(j);
                int modelIndex = column.getModelIndex();
                
                Object value = getBinder().isVirtual(
                        propertyName = getIdentifier(column)) ? bean
                        : getProperty(bean, propertyName);
                model.setValueAt(value, i, modelIndex);
            }
        }
Não entendi mesmo, é aqui que ele joga os dados para a Table?
Object value = getBinder().isVirtual(
                        propertyName = getIdentifier(column)) ? bean
                        : getProperty(bean, propertyName);
                model.setValueAt(value, i, modelIndex);
            }
Esta parte então esta bastante obscura para o meu conhecimento. Desculpa aí pela chateação, mas não vou desistir... Valeu,
Responder

Gostei + 0

09/04/2009

Michael Santos

Basicamente, ele faz um loop na List pra pegar a linha, depois pega a coluna e define o valor com setValueAt.
Responder

Gostei + 0

09/04/2009

Edney Imme

OK... mas os metodos getBinder, getIdentifier e getProperty são de que classe ou interface? é ai que esta dando erro. A lógica agora eu entendi...
Object value = getBinder().isVirtual(   
                        propertyName = getIdentifier(column)) ? bean   
                        : getProperty(bean, propertyName);   
                model.setValueAt(value, i, modelIndex); 
valeu,
Responder

Gostei + 0

09/04/2009

Edney Imme

[quote="sergiojunior"]mas os metodos getBinder, getIdentifier e getProperty são de que classe ou interface? é ai que esta dando erro. A lógica agora eu entendi...
Das classes internas do genesis. Você precisa na verdade é acessar o valor x,y que você quer mostrar em determinada célula. Eu recomendo que você use um framework ao invés de ficar programando nesse nível.
Responder

Gostei + 0

09/04/2009

Sergio_junior

ok! Entendo.... Onde posso baixar e aprender a trabalhar com este framework.... Valeu,
Responder

Gostei + 0

09/04/2009

Edney Imme

[quote="sergiojunior"]Onde posso baixar e aprender a trabalhar com este framework....
[url=https://genesis.dev.java.net/nonav/3.0-RC2/maven-site/pt-BR/]Aqui[/url]
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar