[Resolvido]Executar metodo (query) ao clicar na jTable

7 respostas
C

Pessoal,

Tenho uma Jtable com o seguinte código pós-inicialização:

this.jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
lsmcontato = this.jTable1.getSelectionModel();
lsmcontato.addListSelectionListener(new ListSelectionListener() { 
public void valueChanged(ListSelectionEvent e){ 
if (! e.getValueIsAdjusting()){ 
jTableLinhaSelecionada(jTable1);}}
});
private void jTableLinhaSelecionada(JTable tabela) {
        if (this.jTable1.getSelectedRow() != -1) {

            this.jTextFieldID.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getId()));
            this.jTextNome.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getNome()));
            this.jTextCpf.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getCpf()));
            this.jTextIEst.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getiEstado()));
            this.jTextContato.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getContato()));
            this.jTextLogradouro.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getLogradouro()));
            this.jTextNumero.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getNumero()));
            this.jTextCompl.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getComplemento()));
            this.jTextBairro.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getBairro()));
            this.jTextCep.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getCep()));
            this.jTextCidade.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getCidade()));
            this.jTextUf.setText(String.valueOf(contatos.get(tabela.getSelectedRow()).getUf()));

        } else {
            this.jTextNome.setText("");
            this.jTextCpf.setText("");
            this.jTextIEst.setText("");
            this.jTextContato.setText("");
            this.jTextLogradouro.setText("");
            this.jTextNumero.setText("");
            this.jTextCompl.setText("");
            this.jTextBairro.setText("");
            this.jTextCep.setText("");
            this.jTextCidade.setText("");
            this.jTextUf.setText("");

        }

    }

Bom tenho 2 Jtables uma lista os Clientes e a outra é para listar os contatos(Telefones) que vem de uma outra tabela relacionada.
A idéia é quando eu clicar em uma linha da Jtable ( clientes ) ela executar um outro método para preencher a Jtable (contatos) com os telefones:

porém, não sei em qual evento ou método coloco esse listarTelefones.

public void listarTelefones() throws SQLException {
        ManipulaBD cnn = new ManipulaBD();
        telefones = cnn.getListaTelefone("%" + this.jTextFieldID.getText());
        mostraTelefones(telefones);

    }

    private void mostraTelefones(List<Clientes> telefones) {
        while (tmTelefones.getRowCount() > 0) {
            tmTelefones.removeRow(0);
        }
        if (telefones.size() == 0) {
            JOptionPane.showMessageDialog(null, "Nenhum telefone cadastrado");
        } else {
            // cria vetor
            String[] linha = new String[]{null, null, null};

            for (int i = 0; i < telefones.size(); i++) {
                tmTelefones.addRow(linha);
                tmTelefones.setValueAt(telefones.get(i).getId(), i, 0);
                tmTelefones.setValueAt(telefones.get(i).getDDD(), i, 1);
                tmTelefones.setValueAt(telefones.get(i).getTelefone(), i, 2);

            }
        }
    }

7 Respostas

lucas_vieira

Adicione o mouse listener aos seu Jtable

jTable1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTable1MouseClicked(evt); } });

Depois implemente o metodo mouseCliked(evt) //dei esse nome pq é o que está na adição do mouse listener:

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) { //seu código ou metodo aqui =D }

Eu faço assim, se alguém conhecer um jeito melhor poste ai que assim pode ajudar também (e posso melhorar minha implementação tbm ^^)

Espero ter ajudado
Abraço aew galera

E

fala véio!

coloca um evento de seleção na tabela clientes, que ao selecionar uma linha nela, carregará objetos para popular a tabela contatos.
faz assim:

tableClientes.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
         
         @Override
         public void valueChanged(ListSelectionEvent e){
            // TODO Adicionar aqui o código responsável por carregar os contatos do cliente selecionado.
            
         }
      });

espero q te ajude!!!
abraço...

C

Bom galera não sei se é o certo mais olhando o código de vocês, coloquei apenas um evento MouseClicked ListarTelefones(); e funcionou;…rsrs

Será que tem algum problema?

lucas_vieira

Ao meu ver não. Com relação a funcionamento já ficou claro pra vc que funciona. Já com relação a otimizaçãonão conheço nada mais rápido ou ecônomico.

Mude o tópico para resolvido.

Abraço.

E

os eventos de mouse funcionam certinho, se sua aplicação está voltada à apenas o uso/interação com o mouse para comandos da navegação da tabela.

Agora para fazer uma navegação pela tabela utilizando comandos do teclado e/ou mouse que, a cada mudança de linha selecionada, demonstre os resultados, eu aconselho usar o listSelectionListener.

C

Emmanuel,

devo colocar o seu código após a inicialização do meu formulário, fiquei com dúvida!

tableClientes.getSelectionModel().addListSelectionListener(new ListSelectionListener(){   
     
   @Override   
   public void valueChanged(ListSelectionEvent e){   
      // TODO Adicionar aqui o código responsável por carregar os contatos do cliente selecionado.   
         
   }   
});

Isso é verdade mesmo, vai funcionar apenas no Evento click do botão! ( QUE NÂO È O IDEAL)

E

Beleza então cara…
só edita o título do tópico para [RESOLVIDO] caso funcionou para vc, pq isso pode ser dúvida pra outros…

bom trabalho…
abraço

Criado 17 de maio de 2011
Ultima resposta 17 de mai. de 2011
Respostas 7
Participantes 3