Ai gente to com o seguinte problema, criei um programa que grava infos de pessoas em um arquivo .DB, e usando uma JList eu consigo mostrar o nome das pessoas que foram salvas, mas to querendo fazer o mesmo com uma JTable mas ta dificil, sera que alguem pode me ajudar ? eu tentei criar um metodo para recuperar esses valores mas não ta funcionando. Ai vai o metodo:
Alguem tem ideia de como me ajudar???
To ficando doido com isso e não consigo resolver, sei que deve ser uma coisa simples mas é que eu to começando agora no mundo Java. sera que alguem tem pelo menos um exemplo ???
Ai gente to com o seguinte problema, criei um programa que grava infos de pessoas em um arquivo .DB, e usando uma JList eu consigo mostrar o nome das pessoas que foram salvas, mas to querendo fazer o mesmo com uma JTable mas ta dificil, sera que alguem pode me ajudar ? eu tentei criar um metodo para recuperar esses valores mas não ta funcionando. Ai vai o metodo:
Alguem tem ideia de como me ajudar???
To ficando doido com isso e não consigo resolver, sei que deve ser uma coisa simples mas é que eu to começando agora no mundo Java. sera que alguem tem pelo menos um exemplo ???
Seguindo a mesma lógica poderia ficar algo como assim
PS: não use DefaultTableModel, crie sua própria TableModel que extenda a AbstractTableModel
ViniGodoy
Apoiadíssimo.
wagne23
Mark_Ameba valeu pela ajuda mas ainda ta dando erro.
for (Membro m : lista){
String [] row = {m.getNome()};
modelo.insertRow(0,row);
}
estou usando o eclipse e ele me mostra um erro : “Type mismatch: cannot convert from element type Object to Membro” na linha for (Membro m : lista){. :?:
ViniGodoy
Você tem que definir o tipo dos generics da lista.
Comece a usar coleções assim:
private void fillMembrosModel(DefaultListModel model){
Collection<Membro> lista = null; //Collection<Membro> ao invés de só Collection
try{
if(Caravana != null){
lista = Caravana.recuperaMembro();
for (Membro mbr : lista) {
model.addElement(" "+mbr.getNome());
}
}
}catch(Exception e){
e.printStackTrace();
}
}
Caso contrário, o get de sua lista retornará um Object. E certifique-se que sejam realmente membros que estejam cadastrados na Collection que retorna de recuperaMembro.
Gobain
Apoiadíssimo.
Desculpa minha ignorância, mas pq não? Ou pq não extender a DefaultTableModel?
A DFTM já tem métodos implementados de add/insertRow, o q facilita bastante não é?
Manda uma explicaçãozinha ae!!
ViniGodoy
O DefaultTableModel lida com Strings, aliás, um Vectors de Vectors de String.
O correto é você fazer um Model que apenas mostre como a Table deve representar os seus objetos de negócio. Esse model lida com os objetos em si. Isso te dá vantagens como:
Se você precisar pegar o objeto que está na linha selecionada, basta pedir para seu model:
A informação de suas classes de negócio não fica duplicada nas Strings do model. O que significa uma economia de pelo menos 50% em termos de memória;
O DefaultTableModel baseia-se em Vectors de Vectors. Vectors são sincronizados, antigos e pouco eficientes. O seu model personalizado pode trabalhar com ArrayLists (ou a lista que você quiser). E dificilmente terá que usar ArrayLists aninhados (ArrayLists de ArrayLists);
O código fica mais orientado a objetos, mais simples e mais organizado;
Usar o DefaultTableModel deixa muita lógica dentro do código da interface gráfica (provavelmente do JFrame). Com o AbstractTableModel, isso fica muito mais encapsulado;
Entender como usar os models corretamente é o primeiro passo para entender como recursos avançados como filtros, renderers e editors personalizados funcionam;
É mais fácil controlar modificações feitas no JTable com um model próprio.
Também não vejo vantagem em trabalhar com um filho de DefaultTableModel. Duplicar os valores de seus objetos nos vectors de vectors dessa classe é mais difícil e muito menos eficiente.
Gobain
Bom, então eu defino como os objetos serão armazenados no model certo?
Daí eu uso um ArrayList genérico ou defino minha classe de objetos que eu quero listar na table?
wagne23
Cara valeu mesmo, agora ta funcionando legal, mas pelo visto tenho que aprender muita coisa ainda. Tem alguma dica de como criar o minha propria TableModel ? Algum tutorial ou sei la ?? Mais uma vez obrigado a todos.
wagne23
Ai sem querer abusar muito, vi que ainda tenho um “probleminha”, é que depois que eu cadastro alguem , ele não aparece na tabela, so depois que eu reinicio a aplicação, como eu faço para atualizar assim que eu cadastrar alguem ja me mostrar na tabela? (Desculpem a minha falta de conhecimento).
O TableModel precisa avisar o Table de que o item foi adicionado. Para isso, procure por um método chamado fireTableRowsAdded (ou Inserted, agora não lembro). Haverá outros métodos também para avisar que os dados mudaram ou que linhas foram excluídas.
Cara, esse link foi tudo de bom!
Tirou todas as minhas dúvidas!!! Valeu mesmo!
Marky.Vasconcelos
O TableModel precisa avisar o Table de que o item foi adicionado. Para isso, procure por um método chamado fireTableRowsAdded (ou Inserted, agora não lembro). Haverá outros métodos também para avisar que os dados mudaram ou que linhas foram excluídas.
Minha primeira TableModel eu fiz baseada nesses exemplos^^
Gobain
Olhe, esse exemplo que o ViniGodoy passou exclareceu minhas dúvidas de como usar o AbstractTableModel, e facilitou muito meu trabalho com tabelas…
Usei um ArrayList pra guardar os dados das minhas classes do BD… cortou pela metade o trabalho q eu tinha pra tratar os dados que antes estavam em Object[][]
fabim
Agora faça a sua Jtable, qdo clicar no header da coluna, ordenar os registros por essa coluna.
:idea: Use comparable e comparator
wagne23
Valeu gente, agora ta funcionando legal. Muito Obrigado !!!
Gobain
fabiocsi:
Agora faça a sua Jtable, qdo clicar no header da coluna, ordenar os registros por essa coluna.
:idea: Use comparable e comparator
Ordenação eu já tinha feito…
É q eu não tinha entendido direito os conceitos do AbstractTableModel