Duvida jPopUpMenu em uma jTable

Olá, sou novo aqui e não sei se já responderam essa duvida, mas não achei, enfim gostaria de uma ajudinha…

Tenho um projeto de criar uma aplicação JAVA com conexão a um banco de dados de dados para controle de clientes para uma empresa fictícia, e estou tendo dificuldade na hora de excluir um registro numa jTable após buscar os registro por um comando SELECT na classe DAO. Criei um jPopUpMenu para após selecionar um cliente, eu poder selecionar “Excluir” ou “Alterar”, mas quando clico em um dos dois, aparece “Tabela não selecionada”, uma frase q coloquei para algum erro, mas não sei q erro está dando. O codigo de DELETE no DAO está certo, mas não sei o que é, aqui vai o código para poderem me ajudar…

Aqui o códio da tela de consulta/excluir/alterar clientes:

[code]public class ConsultarCliente extends javax.swing.JFrame {

DefaultTableModel modelo;

public ConsultarCliente() {
    initComponents();
    
    modelo = (DefaultTableModel) jTablePesquisa.getModel();
    jTablePesquisa.setAutoCreateRowSorter(true);

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
atualizaTabela();
}

private void jTablePesquisaMouseReleased(java.awt.event.MouseEvent evt) {                                             
    if (evt.isPopupTrigger()) {
        jPopupMenu1.show(evt.getComponent(), evt.getX(), evt.getY());
    }
}                                            

private void mnuAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                           
    atualizaTabela("Alterar");
}                                          

private void mnuExcluirActionPerformed(java.awt.event.ActionEvent evt) {                                           
    atualizaTabela("Excluir");
}                                  

private void atualizaTabela() {

    String busca = txtBusca.getText();
    
    DAO listaClientes = new DAO();
    ResultSet resultado = listaClientes.selectDados(busca);
    
    jTablePesquisa.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    
    jTablePesquisa.getColumnModel().getColumn(0).setPreferredWidth(30);
    jTablePesquisa.getColumnModel().getColumn(1).setPreferredWidth(170);
    jTablePesquisa.getColumnModel().getColumn(2).setPreferredWidth(90);
    jTablePesquisa.getColumnModel().getColumn(3).setPreferredWidth(120);
    jTablePesquisa.getColumnModel().getColumn(4).setPreferredWidth(200);
    
    modelo.setRowCount(0);
    
    try {
        while (resultado.next()) {
            String codigo = resultado.getString("CODIGO");
            String nome = resultado.getString("NOME");
            String sobrenome = resultado.getString("SOBRENOME");
            String datansc = resultado.getString("DATANSC");
            String email = resultado.getString("EMAIL");
            String cpf = Integer.toString (resultado.getInt("CPF"));
            String cnpj = Integer.toString (resultado.getInt("CNPJ"));
            String login = resultado.getString("LOGIN");
            String senha = resultado.getString("SENHA");
            String sexo = resultado.getString("SEXO");

            modelo.addRow(new String[] {codigo, nome, sobrenome, datansc, email, cpf, cnpj, login, senha, sexo});
        }
        listaClientes.fechaConexão();
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(this, e.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
    }
    
}

public void atualizaTabela(String action) {
    int cod = 0;
    int row = 0;
    int col = 0;
    try {
        row = jTablePesquisa.getSelectedRow();
        cod = Integer.parseInt(jTablePesquisa.getValueAt(row, col).toString());
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this, "Tabela não selecionada!", "Atenção", JOptionPane.INFORMATION_MESSAGE);
        return;
    }
    if (action.equals("Alterar")) {
       AtualizaCliente alterarCliente = new AtualizaCliente(cod, this);
        this.setVisible(false);
        alterarCliente.setVisible(true);
    } else if (action.equals("Excluir")) {
        DAO excluirCliente = new DAO();
        modelo.removeRow(row);
        excluirCliente.excluir(cod);
    }
}

[/code]

Classe DAO na parte de DELETE:

[code]public void excluir(int cod) {

    acesso = new DatabaseConnection("usuario","senha");
    String cmdSQL = "DELETE FROM cliente WHERE CPF = " + cod;
    try {
        acesso.getStmt().executeUpdate(cmdSQL);
    } catch (SQLException e) {
        acesso.show("Erro SQL :" + e.getMessage());
    }
    acesso.fechaConexão();[/code]

Você boicotou a si mesmo com uma mensagem de erro que não tem nada a ver com o problema. Troque isso:

try { row = jTablePesquisa.getSelectedRow(); cod = Integer.parseInt(jTablePesquisa.getValueAt(row, col).toString()); } catch (Exception e) { JOptionPane.showMessageDialog(this, "Tabela não selecionada!", "Atenção", JOptionPane.INFORMATION_MESSAGE); return; }

Por isso:

try { row = jTablePesquisa.getSelectedRow(); cod = Integer.parseInt(jTablePesquisa.getValueAt(row, col).toString()); } catch (Exception e) { JOptionPane.showMessageDialog(this, e.getMessage(), "Atenção", JOptionPane.INFORMATION_MESSAGE); return; }

E diga qual é a real mensagem de erro do problema.

Valeu cara, agora sei o erro, mas ainda não sei como solucionar… deu “Invalid Index”

Uma das linhas da tabela está, efetivamente, selecionada?

Isso eu não sei ao certo, quando eu clico na linha ela fica azul… e outra, quando eu seleciono uma linha e aciono o jPopUpMenu não aparece nenhuma mensagem de erro dentro da caixa de mensagem de erro, o erro Invalid Index aparece quando aciono o jPopUpMenu sem nenhuma linha selecionada

Sim, pois seu código depende da linha selecionada. Se não tiver nenhuma, o método getSelectedRow() irá retornar -1, e daí o seu invalid index.

Certo, e como eu efetivamente seleciono a linha e executo o delete nela?

Você clica na linha. Não é usual o mouse automaticamente selecionar alguma coisa no popup menu. Menus assim são usados no contexto geral dos componentes.

Certo, mas mesmo eu selecionando a linha e apertando em excluir não vai, abre a caixa de erro, mas com nenhuma mensagem.