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

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);}} });

[code] 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("");

    }

}

[/code]

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.

[code] 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);

        }
    }
}

[/code]

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

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:

[code] 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.
        
     }
  });

[/code]

espero q te ajude!!!
abraço…

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?

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.

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.

Emmanuel,

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

[code]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.

}
}); [/code]

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

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