Ajuda com jTable e seus componentes!

6 respostas
G

Eai galera tou com um problema que é o seguinte:
Tenho uma classe de Vendas que possui uma jTable (nomeada de tabelaLocal) que possui 3 colunas sendo elas Código, Serviço e Valor e que quando o formulário de vendas é chamado ela é populada de acordo com o número de objetos que eu recuperei da minha base de dados. Porém quando vou executar uma venda, preciso de vincular um cliente e para listar os clientes cadastrados criei um botão que vai chamar o método listarClientes() para sobreescrever esta tabela local com uma tabela de clientes para listar os mesmos. Então criei a classe criaTabela para criar a tabela cliente, popular a mesma e devolver a tabela já populada para sobreescrever a minha tabelaLocal, segundo o código abaixo (somente os métodos que interessam):

Na classe Vendas
public void listarClientes() {
       tabelaLocal = criarTabela.montaTabela();
    }
Na classe CriaTabela:
public JTable montaTabela(){

            DefaultTableModel modelo = new DefaultTableModel();
            modelo.setNumRows(0);
            String [] colunas = new String[]{"Código", "Nome", "Telefone", "Endereço", "Número", "Bairro"};
            modelo.addColumn(colunas);
            ClienteBO boCliente = new ClienteBO();
            List<Cliente> clientes = boCliente.buscaTodos();
             try {
                 Iterator<Cliente> i = clientes.iterator();
                 Cliente c;
                 while (i.hasNext()) {
                     c = i.next();
                     modelo.addRow(new Object[] {c.getId(), c.getNome(), c.getTelefone(), c.getEndereco(), c.getNumero(), c.getBairro()});
                 }
             } catch (Exception e) {
                 e.printStackTrace();
                 msg.avisos("Erro ao listar os clientes na tabela");
               }
            JTable novaTabela = new JTable(modelo);
            return novaTabela;
}

O problema que tenho é que quando eu faço o uso do botão (a ActionPerformed já está definida e fazendo a chamada correta do método listarClientes() ), ele faz a chamada da minha classe de criar a tabela e ela é retornada porém a minha tabelaLocal não é sobreescrita! O que fazer?

6 Respostas

L
Gabriel Garcia:
Eai galera tou com um problema que é o seguinte: Tenho uma classe de Vendas que possui uma jTable (nomeada de tabelaLocal) que possui 3 colunas sendo elas Código, Serviço e Valor e que quando o formulário de vendas é chamado ela é populada de acordo com o número de objetos que eu recuperei da minha base de dados. Porém quando vou executar uma venda, preciso de vincular um cliente e para listar os clientes cadastrados criei um botão que vai chamar o método listarClientes() para sobreescrever esta tabela local com uma tabela de clientes para listar os mesmos. Então criei a classe criaTabela para criar a tabela cliente, popular a mesma e devolver a tabela já populada para sobreescrever a minha tabelaLocal, segundo o código abaixo (somente os métodos que interessam): Na classe Vendas
public void listarClientes() {
       tabelaLocal = criarTabela.montaTabela();
    }
Na classe CriaTabela:
public JTable montaTabela(){

            DefaultTableModel modelo = new DefaultTableModel();
            modelo.setNumRows(0);
            String [] colunas = new String[]{"Código", "Nome", "Telefone", "Endereço", "Número", "Bairro"};
            modelo.addColumn(colunas);
            ClienteBO boCliente = new ClienteBO();
            List<Cliente> clientes = boCliente.buscaTodos();
             try {
                 Iterator<Cliente> i = clientes.iterator();
                 Cliente c;
                 while (i.hasNext()) {
                     c = i.next();
                     modelo.addRow(new Object[] {c.getId(), c.getNome(), c.getTelefone(), c.getEndereco(), c.getNumero(), c.getBairro()});
                 }
             } catch (Exception e) {
                 e.printStackTrace();
                 msg.avisos("Erro ao listar os clientes na tabela");
               }
            JTable novaTabela = new JTable(modelo);
            return novaTabela;
}

O problema que tenho é que quando eu faço o uso do botão (a ActionPerformed já está definida e fazendo a chamada correta do método listarClientes() ), ele faz a chamada da minha classe de criar a tabela e ela é retornada porém a minha tabelaLocal não é sobreescrita! O que fazer?

Cara, antes de vc sair usando o JTable recomendo fortemente a leitura sobre ele:
http://download.oracle.com/javase/tutorial/uiswing/components/table.html

Domine bem a implementação de um TableModel e 80% dos seus prblemas serão resolvidos... leia este link:
http://www.guj.com.br/posts/list/15/199067.java#1001295

Abraços

G

Conheço pouco sobre jTable até pq o foco da facudade não é aplicativo desktop! Então tudo que eu tenho descoberto sobre aplicativos desktop foi por conta propria, pesquisando e futricando nas opções do netbeans e dentro dos limites de tempo que tenho!
Vlw ai pela ajuda, vou implementar uma TableModel aqui e se eu tiver alguma duvida eu volto a perguntar neste tópico!

lina

Oi,

Acredito que seria mais simples retornar o modelo e não uma JTable.

Sendo assim, você instância novamente a JTable passando o modelo. Após isso utilize o método repaint para refrescar a sua nova tabela.

Tchauzin!

ViniGodoy

Para ver mais exemplos de como implementar um TableModel, siga os links da minha assinatura.

G

Opa! só passando pra agradecer mesmo hehe, fiz o meu modelo aqui agora ta funcionando blz!
Muito boa as dicas vlw mesmo!
:smiley:
abraços

Marky.Vasconcelos

lina:

…utilize o método repaint para refrescar a sua nova tabela.
Tchauzin!

Engraçado como o portugues da um sentido estranho para coisas tão triviais.

Criado 6 de outubro de 2010
Ultima resposta 7 de out. de 2010
Respostas 6
Participantes 5