Como aparecer dados cadastrados em tempo de execução na JTable ( TableModel )

32 respostas
A

E ai galerinha...
To com um probleminha aqui, sempre que faço um cadastro ele é efetuado perfeitamente no banco de dados, mas o novo dado não aparece em tempo de execução na JTable,por que???
ele só aparece na JTable quando eu fecho e abro novamente a aplicação!!!!
Vo postar os códigos fontes referentes a parte de cadastro!!!

MÉTODO DAO
public void inserir(Contato contato) throws SQLException{

		// Abrir uma conexao
		Connection conn = Conexao.getConexao();

		// Variável utilizada para armazenar os comandos SQL
		String sql = "insert into usuario(nome,idade,telefone)" + "values(?,?,?)";
		//Cria o Statement para executar o código SQL
		PreparedStatement stmt = conn.prepareStatement(sql);

		// Setar os valores no statemant
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getIdade());
		stmt.setString(3, contato.getTelefone());

		// Executa o código SQL com os valores setados
		stmt.execute();
		stmt.close();
	}
REGRA DE NEGÓCIO
public void cadastrarContato(String nome , String idade , String telefone) throws SQLException{
              
		Contato cont = new Contato(nome,idade,telefone);
		contatoDAO cDAO = new contatoDAO();
		cDAO.inserir(cont);
	}
BOTÃO CADASTRAR
private void bt_cadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                             

        if((evt.getSource() == bt_cadastrar) && (verificarDados())){
            ContatoNegocio cont = new ContatoNegocio();
            
            try {
                cont.cadastrarContato(tf_nome.getText(), tf_idade.getText(), tf_telefone.getText());
               
            } catch (SQLException ex) {
                Logger.getLogger(ContatoFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            JOptionPane.showMessageDialog(null,"Cadastrado Com Sucesso!!!");
            limparCampos();
           
        }
    }
Vlw turma!!!! :D

32 Respostas

A

Cara, vc poderia que criar uma lista observable e vincular sua jtable a lista a uma query.
Da uma olhada num projeto de modelo do NetBeans.
Arquivo>Novo Projeto> Java > Aplicativo da área de trabalho Java.

esse projeto é um exemplo de aplicação da JSR 296 (Swing Application Frameworks). É bem simples cara.
Dá uma olhada lá que acho que pode resolver seu problema.

abraços

A

estou Utilizando TableModel, vou deixar assim mesmo…mas vlw por te postado…OBRIGADO IRMÃO :slight_smile:

V

Você deve informar ao seu TableModel que aquele cadastro foi inserido.

Você pode postar o código do seu TableModel?

A
E ai viny..blz cara?? vo postar a tablemodel ai..vlw
private static final int COL_NOME = 0;   
    private static final int COL_IDADE = 1;   
    private static final int COL_TELEFONE = 2;   
  
    private List<Contato> valores;   
  
    // Esse é um construtor, que recebe a nossa lista de livros   
    public ContatoTableModel(List<Contato> valores) {   
        this.valores = new ArrayList<Contato>(valores);   
    }   
  
    public int getRowCount() {   
        // Quantas linhas tem sua tabela? Uma para cada item da lista.   
        return valores.size();   
    }   
  
    public int getColumnCount() {   
        // Quantas colunas tem a tabela? Nesse exemplo, só 2.   
        return 3;   
    }   
  
    public String getColumnName(int columnIdx) {   
        // Qual é o nome das nossas colunas?   
        if (columnIdx == COL_NOME)   
            return "Nome";   
        if (columnIdx == COL_IDADE)   
            return "Idade";   
        if (columnIdx == COL_TELEFONE)   
            return "Tel.";   
        return ""; // Nunca deve ocorrer   
    }   
  
    public Object getValueAt(int row, int column) {   
        // Precisamos retornar o valor da coluna column e da linha row.   
        Contato con = valores.get(row);   
        if (column == COL_NOME)   
            return con.getNome();   
        if (column == COL_IDADE)   
            return con.getIdade();   
        if (column == COL_TELEFONE)   
            return con.getTelefone();   
        return ""; // Nunca deve ocorrer   
    }   
  
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {   
        // Vamos alterar o valor da coluna columnIndex na linha rowIndex com o   
        // valor aValue passado no parâmetro.   
        // Note que vc poderia alterar 2 campos ao invés de um só.   
        Contato con = valores.get(rowIndex);   
        if (columnIndex == COL_NOME)   
            con.setNome(aValue.toString());   
        if (columnIndex == COL_IDADE)   
            con.setIdade(aValue.toString());   
        if (columnIndex == COL_TELEFONE)   
            con.setTelefone(aValue.toString());   
    }   
  
    public Class<?> getColumnClass(int columnIndex) {   
        // Qual a classe das nossas colunas? Como estamos exibindo texto, é   
        // string.   
        return String.class;   
    }   
  
    public boolean isCellEditable(int rowIndex, int columnIndex) {   
        // Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa   
        // tabela toda é.   
        return true;   
    }   
  
    // Já que esse tableModel é de contatos, vamos fazer um get que retorne um   
    // contato inteiro.   
    // Isso elimina a necessidade de chamar o getValueAt() nas telas.   
    public Contato get(int row) {   
        return valores.get(row);   
    }   
}
V

Você precisa criar nele um método:

public void add(Contato c) { valores.add(c); //Adiciona o novo contato no modelo fireTableRowsUpdated(valores.size()-1, valores.size()-1); //Informa a tabela que o modelo mudou. }

E, no actionPerformed do seu botão, chame esse método com o novo contato criado. :slight_smile:

A

certo entendi...mas nao to conseguindo visualizar onde vou chamar esse método do tablemodel dentro do meu ActionPerformed..

Aqui dentro onde vou utiliza-lo??
private void bt_cadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                               
  
       if((evt.getSource() == bt_cadastrar) && (verificarDados())){   
           ContatoNegocio cont = new ContatoNegocio();   
             
           try {   
               cont.cadastrarContato(tf_nome.getText(), tf_idade.getText(), tf_telefone.getText());   
                 
           } catch (SQLException ex) {   
               Logger.getLogger(ContatoFrame.class.getName()).log(Level.SEVERE, null, ex);   
           }   
           JOptionPane.showMessageDialog(null,"Cadastrado Com Sucesso!!!");   
           limparCampos();   
             
       }   
   }
V

Você tem duas opções:

  1. Faça o método cadastrarContato retornar o novo contato criado ou;
  2. Crie um novo contato antes de chamar o método cadastrarContato, e passe-o tanto para o cadastrarContato quanto para o model.

Eugeralmente uso a opção 2.

A

Ai viny, fiz a segunda opção e deu certo cara…Mas ai eu tava efetuando uns teste aqui e encontrei um probleminha, seguinte.: O contato é inserido em tempo de execução na JTable corretamente, mais caso você altere esse novo contato inserido logo após sua inserção, ele altera perfeitamente, mas ai quando você fecha e abre novamente a aplicação ele nao foi alterado… será por que???

V

Deve ser problema no seu DAO. É ele quem salva os dados e carrega…

A
To ferrado.... Analisei minha classe DAO por completo aqui mas não vi nada de errado nele nao, vo postar ela completa aqui, ai você da uma olhadinha, caso ache alguma coisa estranha você comenta ai e eu testo na aplicação...vlw
import Negocio.Contato;

public class contatoDAO {


	public void inserir(Contato contato) throws SQLException{

		// Abrir uma conexao
		Connection conn = Conexao.getConexao();

		// Variável utilizada para armazenar os comandos SQL
		String sql = "insert into usuario(nome,idade,telefone)" + "values(?,?,?)";
		//Cria o Statement para executar o código SQL
		PreparedStatement stmt = conn.prepareStatement(sql);

		// Setar os valores no statemant
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getIdade());
		stmt.setString(3, contato.getTelefone());

		// Executa o código SQL com os valores setados
		stmt.execute();
		stmt.close();
	}

	public List<Contato> listar() throws SQLException{

        Connection conn = Conexao.getConexao();

		String sql = "Select * from usuario order by nome";
		PreparedStatement stmt = conn.prepareStatement(sql);

		// Esse método é utilizado para apontar para os dados do BD
		ResultSet rs = stmt.executeQuery();

		//Cria uma lsita para armazenar os valores que serão buscados
		 List<Contato> minhaLista = new ArrayList<Contato>();

		while(rs.next()){
			// Essa Rotína pega os dados do banco e armazena nesse objeto do tipo contato
			Contato contato = new Contato(rs.getInt("idusuario"));
                        contato.setNome(rs.getString("nome"));
                        contato.setIdade(rs.getString("idade"));
                        contato.setTelefone(rs.getString("telefone"));
                        
			//Essa rotína adiciona os dados de contato no objeto minhaLista
			minhaLista.add(contato);

		 }
		 rs.close();
		 stmt.close();
		 return minhaLista;
      }

	public void altera(Contato contato) throws SQLException{

		Connection conn = Conexao.getConexao();
		String sql = " Update usuario set nome = ? ,idade = ? ,telefone = ? where idusuario = ? ";
		PreparedStatement stmt = conn.prepareStatement(sql);

		// Setar os valores no statemant
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getIdade());
		stmt.setString(3, contato.getTelefone());
		stmt.setInt(4,contato.getIdusuario());

		// Executa o código SQL com os valores setados
		stmt.execute();
		stmt.close();

	}

	public void deletar(Contato contato) throws SQLException{

		Connection conn = Conexao.getConexao();
		String sql= "Delete From usuario where idusuario=?";
		PreparedStatement stmt = conn.prepareStatement(sql);

		stmt.setInt(1, contato.getIdusuario());
		stmt.execute();
		stmt.close();

		}
	public List<Contato> buscar(String nome) throws SQLException{

        Connection conn = Conexao.getConexao();

        // Nesta Rotína, nescessita de utilizar o contrutor
        // para inicializa-lo com o parametro de deseja consultar
	        Contato contato = new Contato(nome);

                String sql = "Select * from usuario where nome=?";
		PreparedStatement stmt = conn.prepareStatement(sql);
		stmt.setString(1, contato.getNome());
		ResultSet rs = stmt.executeQuery();

		 List<Contato> listar= new ArrayList<Contato>();

		while(rs.next()){


			Contato cont = new Contato(rs.getInt("idusuario"));
                        cont.setNome(rs.getString("nome"));
                        cont.setIdade(rs.getString("idade"));
                        cont.setTelefone(rs.getString("telefone"));
			listar.add(cont);

		 }
		 rs.close();
		 stmt.close();
		 return listar;
      }


}
A

E ai galerinha, alguma solução :frowning:

A

E ai… ajuda ai

M

Talvez sua tela de cadastro não esta enviando o objeto criado para o model. Voce tem certeza que enviou um objeto para o add do TableModel?

A
Mark_Ameba:
Talvez sua tela de cadastro não esta enviando o objeto criado para o model. Voce tem certeza que enviou um objeto para o add do TableModel?
Mas você viu que meu problema nao é na tablemodel reconhecer o novo contato, é sim tentar alterar o novo contato criado, quando crio o novo contato ele aparece em tempo de execução na JTable, mas caso tente alterar esse novo contato, em tempo de execução ele se altera, mas quando fecho a abro minha aplicação ele não se alterou, está como foi cadastrado.... Caso altere um cadastro ja criando, ele altera perfeitamente... o Problema é caso eu altere um novo contato na mesma execução que ele foi criado!!! Sim... da uma Analísada no meu botão cadastrar pra você ver o método ta table model em ação vo postar ele aqui ai vc analisa..
private void bt_cadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                             

        if((evt.getSource() == bt_cadastrar) && (verificarDados())){
            ContatoNegocio cont = new ContatoNegocio();
            ContatoTableModel modelo = (ContatoTableModel)tabela.getModel();
            
            // Contato Criado para utilizar no tablemodel, para que ele
            // possa indentificar o novo contato
            Contato contato = new Contato(tf_nome.getText() , tf_idade.getText() , tf_telefone.getText());
            try {
                
                cont.cadastrarContato(contato.getNome(),contato.getIdade(),contato.getTelefone());
                modelo.add(contato);// OLHA O MÉTODO DA TABLE MODEL EM AÇÃO  :D 
                
            } catch (SQLException ex) {
                Logger.getLogger(ContatoFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            JOptionPane.showMessageDialog(null,"Cadastrado Com Sucesso!!!");
            limparCampos();
                
            
        }
    }
Vo postar também o método da tablemodel que add o novo contato MÉTODO DA TABLEMODEL
public void add(Contato c){
        Contato.add(c);//adiciona o novo contato no modelo
        this.fireTableRowsInserted(Contato.size(),Contato.size());
    }
vlw cara!!!!! :)
A

Anderson S.:
Ai viny, fiz a segunda opção e deu certo cara…Mas ai eu tava efetuando uns teste aqui e encontrei um probleminha, seguinte.: O contato é inserido em tempo de execução na JTable corretamente, mais caso você altere esse novo contato inserido logo após sua inserção, ele altera perfeitamente, mas ai quando você fecha e abre novamente a aplicação ele nao foi alterado… será por que???

Ai Mark_Ameba, aqui eu citou meu probleminha… da uma Analísada ai pra você ver…Obrigado!![i]

M

Hmm… pelo que vi esse método nunca vai alterar nenhum objeto.
Sempre que chamado ira criar um novo Contato e enviar para o Model.

E outra.

por que no método add do model voce chama o add da classe Contato? Ele é uma lista também? Não deveria.

A

Mark_Ameba:
Hmm… pelo que vi esse método nunca vai alterar nenhum objeto.
Sempre que chamado ira criar um novo Contato e enviar para o Model.

E outra.

por que no método add do model voce chama o add da classe Contato? Ele é uma lista também? Não deveria.

Mas esse é meu botão cadastrar, não é pra alterar nao, acho que vc nao entendeu, a parte de alterar é outra…
está cadastrando perfeitamente…em tempo de execução… altera perfeitamente…em tempo de execução… caso eu criei um novo contato e na mesma hora tentar altera-lo, a alteração ocorre em tempo de exexução, mas quando abro e fecho a aplicação ele nao se altero…esse é problema…
Como vc fazeria o método ADD do model???
poste o seu ai, talvez isso pode ser o erro!!! Obrigado!

M

O método add do meu TableModel é bem parecido com o seu:

public void add(T obj) {
		data.add(obj);
		fireTableDataChanged();
	}

T como argumento por que é uma classe generica (ObjectTableModel) onde voce passa o tipo para o TableModel.
E o fireTableDataChanged() avisa a JTable que os dados mudaram, mas o resultado é o mesmo que o que voce usa (fireTableRowUpdated/Inserteds… etc)

Anyway… acho que esse não é o problema.

Então posta o código do botão alterar ai.

A

Você entendeu realmente meu problema né????????
Vo postar o botão alterar e todos os outros métodos referentes a alteração...vlw

BOTÃO ALTERAR
private void bt_alterarActionPerformed(java.awt.event.ActionEvent evt) {                                           

        if(evt.getSource() == bt_alterar){
            ContatoNegocio cont = new ContatoNegocio();
            int row = tabela.getSelectedRow();
              if(row != -1){
                ContatoTableModel modelo = (ContatoTableModel)tabela.getModel();
                Contato con = modelo.get(row);//Campo está criado dentro do Table model "
                 //private List<Contato> Contato;

                try {
                    cont.alterarContato(con,tf_nome.getText(), tf_idade.getText(), tf_telefone.getText());
                } catch (SQLException ex) {
                    Logger.getLogger(ContatoFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
                modelo.fireTableRowsUpdated(row, row);
                JOptionPane.showMessageDialog(null,"Alterado com Sucesso!!");
              }else{
                JOptionPane.showMessageDialog(null,"Selecione um Campo para ser Alterado!");
              }
               
           
        }
    }
REGRA DE NEGÓCIO
public void alterarContato(Contato cont,String nome,String idade,String telefone) throws SQLException{

	        cont.setNome(nome);
                cont.setIdade(idade);
                cont.setTelefone(telefone);
		contatoDAO cDAO = new contatoDAO();
		cDAO.altera(cont);
	}
MÉTODO DE ALTERAR DAO
public void altera(Contato contato) throws SQLException{

		Connection conn = Conexao.getConexao();
		String sql = " Update usuario set nome = ? ,idade = ? ,telefone = ? where idusuario = ? ";
		PreparedStatement stmt = conn.prepareStatement(sql);

		// Setar os valores no statemant
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getIdade());
		stmt.setString(3, contato.getTelefone());
		stmt.setInt(4,contato.getIdusuario());

		// Executa o código SQL com os valores setados
		stmt.execute();
		stmt.close();

	}
Ta ai, todos os métodos que participam da alteração...vlw
M

Em teoria isso devia funcionar.

Invés de
fireTableRowsUpdated(row, row);

Use
fireTableDataChanged();
para ver.

E algo que reparei é que voce fica sempre passando todos os dados por parametro, acho que essa não é a forma ideal. Por que não apenas seta na mesma ação os atributos depois envia pra DAO?

A

Mark_Ameba:
Em teoria isso devia funcionar.

Invés de
fireTableRowsUpdated(row, row);

Use
fireTableDataChanged();
para ver.

E algo que reparei é que voce fica sempre passando todos os dados por parametro, acho que essa não é a forma ideal. Por que não apenas seta na mesma ação os atributos depois envia pra DAO?


Vo testar o que você falo ai, mas respondendo sua pergunta, eu gosto de usar passagem por parametro, e caso eu set os valores ou passe por parametro, irá dar o mesmo resultado, ja testei isso!!mas mesmo assim Obrigado…
Vo testar o que você falou ai e qualquer coisa eu posto certo!!! T+++++

A
Ai Mark_Ameba, fiz um teste aqui que foi o seguinte, coloquei meu TableModel para listar o idusuario na JTable, e tive uma surpresa, quando cadastro um novo contato, ele aparece em tempo de execucao na JTable, mas o idusuario nao aparece na JTable, por isso que nao esta alterando, sendo assim, sera que o problema e onde?? pelo jeito nao e na alteracao, e na parte de cadastro e exatamente onde atualiza em tempo de execucao, vo postar toda a parte de cad aqastro , e tabem a parte da tablemodel que atualiza em tempo de execucao, ai voce analisa ai....vlw pela ajuda!!! CADASTRAR DO DAO
public void inserir(Contato contato) throws SQLException{

		// Abrir uma conexao
		Connection conn = Conexao.getConexao();

		// Variável utilizada para armazenar os comandos SQL
		String sql = "insert into usuario(nome,idade,telefone)" + "values(?,?,?)";
		//Cria o Statement para executar o código SQL
		PreparedStatement stmt = conn.prepareStatement(sql);

		// Setar os valores no statemant
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getIdade());
		stmt.setString(3, contato.getTelefone());

		// Executa o código SQL com os valores setados
		stmt.execute();
		stmt.close();
	}
REGRA DE NEGOCIO
public void cadastrarContato(String nome , String idade , String telefone) throws SQLException{
              
		Contato cont = new Contato(nome,idade,telefone);
		contatoDAO cDAO = new contatoDAO();
		cDAO.inserir(cont);
	}
BOTAO CADASTRAR
private void bt_cadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                             

        if((evt.getSource() == bt_cadastrar) && (verificarDados())){
            ContatoNegocio cont = new ContatoNegocio();
            ContatoTableModel modelo = (ContatoTableModel)tabela.getModel();
            
            // Contato Criado para utilizar no tablemodel, para que ele
            // possa indentificar o novo contato
            Contato contato = new Contato(tf_nome.getText() , tf_idade.getText() , tf_telefone.getText());
            try {
                
                cont.cadastrarContato(contato.getNome(),contato.getIdade(),contato.getTelefone());
                modelo.add(contato);
                
            } catch (SQLException ex) {
                Logger.getLogger(ContatoFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            JOptionPane.showMessageDialog(null,"Cadastrado Com Sucesso!!!");
            limparCampos();
                
            
        }
    }
METODO DA TABLE MODEL QUE ATUALIZA
public void add(Contato c){
        Contato.add(c);//adiciona o novo contato no modelo
        this.fireTableRowsInserted(Contato.size(),Contato.size());
    }
M

Repare que seu método cadastrar não atualiza o idusuario do objeto.

no ContadoDAO.inserir voce deve após cadastrar o cliente colocar o id no seu objeto.

A

Como assim?? Não entendi…meu idusuario esta como auto-incremente no banco de dados…tem como você pegar meu método inserir do DAO e fazer isso ai que vc falo???
Obrigado!!!

M

Depois de fazer o insert voce precisa fazer o select para saber o id que ele foi inserido e setar no objeto.

A

Não to conseguindo vizualizar, será que daría pra você pegar meu método inserir do DAO e fazer sua solução não??? :frowning:

M

O seu ID é auto-increment certo?

Antes de fazer o insert seu objeto não tem um id.
Voce precisa depois do insert pegar o id gerado (um “SELECT ID where algo”) e descobrir qual é o id desse objeto que acabou de ser inserido. Depois disso coloque esse valor no objeto.

A

Pois é, não to conseguindo visualizar isso ai que vc quer fazer, e que Objeto é esse que você tanto fala???
Tem como você pegar esse método de inserir que vo postar aqui e fazer a alteração que você sugeriu????
fica mais fácil.....

MÉTODO INSERIR DO DAO
public void inserir(Contato contato) throws SQLException{   
  
        // Abrir uma conexao   
        Connection conn = Conexao.getConexao();   
  
        // Variável utilizada para armazenar os comandos SQL   
        String sql = "insert into usuario(nome,idade,telefone)" + "values(?,?,?)";   
        //Cria o Statement para executar o código SQL   
        PreparedStatement stmt = conn.prepareStatement(sql);   
  
        // Setar os valores no statemant   
        stmt.setString(1, contato.getNome());   
        stmt.setString(2, contato.getIdade());   
        stmt.setString(3, contato.getTelefone());   
  
        // Executa o código SQL com os valores setados   
        stmt.execute();   
        stmt.close();   
    }
M

Claro que fica mais facil e eu fizer pra voce.

E o Objeto que tanto falo é o Contato que vai ser inserido no banco.
Depois de inserir voce precisa descobrir qual o id que lhe foi atribuido no banco para setar no objeto com o mesmo valor.

Entendeu agora?

A

Vou tentar aqui, qualquer coisa te aviso…Obrigado!!!

D

Anderson,

Faça o Seguinte,

Primeiro Crie essa classe chamada MyTableModel

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.LinkedList;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;

public class MyTableModel extends DefaultTableModel {

private static final long serialVersionUID = 1L;
private final List entitysToList;
private final Class entityClassToList;
private List<Method> fieldToData = new LinkedList<Method>();
private final JTable tableToControl;

public MyTableModel(Class entityClassToList, List entitysToList,JTable tableToControl) {
    super();
    this.entitysToList = entitysToList;
    this.entityClassToList = entityClassToList;
    this.tableToControl = tableToControl;
    try {
        startAddTheColumns();
        startAddValues();
    } catch (Exception ex) {
        Logger.getLogger(MyTableModel.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private void startAddTheColumns() throws NoSuchMethodException, InstantiationException, IllegalAccessException {
    for (Field field : entityClassToList.getDeclaredFields()) {
        SwingColumn theAnnotation = field.getAnnotation(SwingColumn.class);
        if (theAnnotation != null) {
            // Yes , the column is annotated , but and the next ?
            addColumn(theAnnotation.description());
            //tableToControl.getColumnModel().getColumn(getColumnCount()-1).setCellRenderer(theAnnotation.renderer().newInstance());
            String methodName = "get" + field.getName().toUpperCase().charAt(0) + field.getName().substring(1);
            fieldToData.add(entityClassToList.getDeclaredMethod(methodName));
        }
    }
}

private void startAddValues() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    for (Object entity : entitysToList) {
        List<Object> valuesToAdd = new LinkedList<Object>();

        for (Method method : fieldToData) {
            valuesToAdd.add(method.invoke(entity));
        }

        addRow(valuesToAdd.toArray());
    }
}

}

Depois na parte do código do Botão (Add usuario) do seu programa crie esse método isso pode ser no final de todo o código.

private void loadInitialData() throws SQLException {

try{

usuarios = dao.getAllUsers();

MyTableModel tablem = new MyTableModel(Usuario.class, usuarios, tblUsuarios);

//tblUsuarios é a JTable utiliei esse nome para identificar

tblUsuarios.setModel(tablem);

}catch(Exception e){

e.printStackTrace();

System.out.println(Error loading);

}
}

Após inserir esse método vai no seu botão add(parte do código)
coloque no final do processo loadInitialData();

Veja se isso ajuda...
		Até mais...
A

Essa parte que você citou ai eu ja tenho, nao sei se você leu detalhadamente minha necessidade, mas meu problema não é esse ai que seu código ta resolvendo, leia depois minha Segunda necessidade e a proposta do Mark_Ameba que você irá entender perfeitamente!!! A parte que está no tópico do forum ja foi resolvida, no momento utilizando o mesmo tópico, eu citei dentro dele outro problema, leia todo o conteúdo do tópico que você visualizará meu Segundo Problema Perfeitamente…Mas mesmo assim, Obrigado Pelo post!! :smiley:

Criado 1 de abril de 2010
Ultima resposta 11 de abr. de 2010
Respostas 32
Participantes 5