Marky.Vasconcelos
Ué… seu método adicionaItem não recebe nenhum item como parametro?
Mostra toda sua implementação do Model.
l.cestarolli
Segue a classe:
public class ReflectionTableModel extends AbstractTableModel {
private List<?> lista;
private Class<?> classe;
public ReflectionTableModel(List<?> lista, Class<?> classe) {
this.lista = lista;
this.classe = classe;
}
@Override
public int getColumnCount() {
int colunas = 0;
for (Method method : classe.getDeclaredMethods()) {
if (method.isAnnotationPresent(Coluna.class)) {
colunas++;
}
}
return colunas;
}
@Override
public int getRowCount() {
return lista.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
try {
Object object = lista.get(rowIndex);
for (Method method : classe.getDeclaredMethods()) {
Coluna c = method.getAnnotation(Coluna.class);
if (c != null && c.posicao() == columnIndex) {
return method.invoke(object);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public String getColumnName(int column) {
for(Method method : classe.getDeclaredMethods()){
Coluna c = method.getAnnotation(Coluna.class);
if(c != null && c.posicao() == column){
return c.titulo();
}
}
return "";
}
public void adicionaItem(){
int linha = lista.size()-1;
fireTableRowsInserted(linha,linha);
}
public Object carregaItem(int row){
return lista.get(row);
}
public void deleteItem(int row){
fireTableRowsDeleted(row, row);
lista.remove(row);
}
}
ViniGodoy
Não era melhor fazer um ReflectionTableModel<T> ?
Assim seu método carregaItem poderia retornar o tipo específico, ao invés de Object.
Marky.Vasconcelos
Sim, e seu método adicionaItem deveria receber um item para poder adicionar na lista não acha?
Algo como (E aproveitando dica de generic do Vini)
public void adicionaItem(T item){
list.add(item);
int linha = lista.size()-1;
fireTableRowsInserted(linha,linha);
}
E seu método carregaItem seria assim.
public T carregaItem(int row){
return lista.get(row);
}
E volto a dizer, voce deveria melhorar a lógica do getValueAt.
l.cestarolli
Verdade pessoal, foi vacilo meu… não pensei nisso…
Obrigado pela força!
Leonardo
l.cestarolli
Pessoal, só mais uma dúvida, eu atualizo os dados e a tabela só é atualizada quando eu tiro o foco da linha.
Não deveria atualizar automaticamente?
Marky.Vasconcelos
Como assim? Não entendi sua duvida.
l.cestarolli
Quando eu modifico o objeto da linha 4 por exemplo, a alteração só aparece quando eu mudo o foco de linha.
bezier_curve
l.cestarolli
Funcionou perfeito, valeu!!!