Preencher uma JTable com ArrayList
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.
Minha segunda dúvida, depois que a primeira for resolvida é como aplicar o Array ao modelo da JTable...
Abraço!
public static void carregaTable(){
ClienteDAO dao = new ClienteDAO();
DefaultTableModel modelo = (DefaultTableModel)tbClientes.getModel();
ArrayList array = new ArrayList();
array.add(dao.consultaTodos());
}Sergio Júnior
Curtidas 0
Respostas
Edney Imme
09/04/2009
[quote="sergiojunior"]Bom dia Pessoal,
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.
public static void carregaTable(){
ClienteDAO dao = new ClienteDAO();
DefaultTableModel modelo = (DefaultTableModel)tbClientes.getModel();
ArrayList array = new ArrayList();
array.add(dao.consultaTodos());
}GOSTEI 0
Edney Imme
09/04/2009
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>
GOSTEI 0
Sergio_junior
09/04/2009
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,
GOSTEI 0
Edney Imme
09/04/2009
É só vc fazer:
tabela.setModel()
e passar o novo modelo......
GOSTEI 0
Michael Santos
09/04/2009
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:
E você teria acesso a variável onde quer que precisasse.
@Form
public class MeuForm {
private List minhaLista;
@DataProvider(widgetName="nameTabela")
public List populaTabela() {
return minhaLista;
}
}
GOSTEI 0
Sergio_junior
09/04/2009
OK!
Mas existe uma forma de eu passar o Array para o modelo neh?
Agora eu encasquetei com isto...
hehe
Valeu,
GOSTEI 0
Edney Imme
09/04/2009
[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].
GOSTEI 0
Edney Imme
09/04/2009
Beleza,
Mas não entendi o último for deste código.
Não entendi mesmo, é aqui que ele joga os dados para a Table?
Esta parte então esta bastante obscura para o meu conhecimento.
Desculpa aí pela chateação, mas não vou desistir...
Valeu,
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);
}
}Object value = getBinder().isVirtual(
propertyName = getIdentifier(column)) ? bean
: getProperty(bean, propertyName);
model.setValueAt(value, i, modelIndex);
}GOSTEI 0
Michael Santos
09/04/2009
Basicamente, ele faz um loop na List pra pegar a linha, depois pega a coluna e define o valor com setValueAt.
GOSTEI 0
Edney Imme
09/04/2009
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...
valeu,
Object value = getBinder().isVirtual(
propertyName = getIdentifier(column)) ? bean
: getProperty(bean, propertyName);
model.setValueAt(value, i, modelIndex); GOSTEI 0
Edney Imme
09/04/2009
[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.
GOSTEI 0
Sergio_junior
09/04/2009
ok! Entendo....
Onde posso baixar e aprender a trabalhar com este framework....
Valeu,
GOSTEI 0
Edney Imme
09/04/2009
[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]
GOSTEI 0