Criar uma caixa de confirmação de exclusão e cadastro em um Crud

Boa tarde. Eu estou fazendo um sistema CRUD para fazer cadastro de pessoas dentro de um clube utilizando JFrame + PostgreSQL. Só gostaria saber que alternativas eu poderia ter de mostrar uma mensagem para confirmação de exclusão ou cadastro de uma nova pessoa. Não sei se o jeito certo é criar um novo JFrame para isto, JOptionPane ou algo do tipo. O código está logo abaixo:

package VISUAL;
import DAO.ConectaBD;
import java.sql.*;
import javax.swing.JOptionPane;
import net.proteanit.sql.DbUtils; //Import do rs2xml.jar

public class frmCadUsuarios extends javax.swing.JInternalFrame {
    
    Connection conecta;
    PreparedStatement pst;
    ResultSet rs;
   
    public frmCadUsuarios() throws ClassNotFoundException {
        initComponents();
        this.setLocation(330, 100);
        conecta = ConectaBD.conectabd(); //Conectar com o banco de dados
        listarDesbravadores(); //Inicializar lista
    }
    
    public void listarDesbravadores() {
        String sql = "Select * from usuarios order by codigo Asc";
        try {
            pst = conecta.prepareStatement(sql);
            rs = pst.executeQuery();
            tblDesbravadores.setModel(DbUtils.resultSetToTableModel(rs));
        }
        catch(SQLException error) {
            JOptionPane.showMessageDialog(null, error);
        }
    }
    
    public void cadastrarDesbravadores() {
        String sql = "Insert into usuarios(nome, telefone, endereco) values (?,?,?)"; //? > Inserção dinâmica, sem saber o valor
        try {
            pst = conecta.prepareStatement(sql);
            pst.setString(1, txtNome.getText());
            pst.setString(2, txtTelefone.getText());
            pst.setString(3, txtEndereco.getText());
            
            pst.execute();//Manda executar
            //Mensagem de informação
            JOptionPane.showMessageDialog(null, "Desbravador cadastrado com sucesso!!!", "Confirmação", JOptionPane.INFORMATION_MESSAGE);
            listarDesbravadores(); //Atualiza a janela com as informações dentro dela
            
        }
        catch(SQLException error) {
            JOptionPane.showMessageDialog(null, error);
        }
    }
    
    public void pesquisarDesbravadores() {
        String sql = "Select * from usuarios where nome like ?";
        try {
            pst = conecta.prepareStatement(sql);
            pst.setString(1, txtPesquisar.getText()+"%"); //Quando apagar, trazer as informações, usado com o like
            rs = pst.executeQuery();
            tblDesbravadores.setModel(DbUtils.resultSetToTableModel(rs));
        }
        catch(SQLException error) {
            JOptionPane.showMessageDialog(null, error);
        }
        
    }
    
    public void mostrarItens() {
        int seleciona = tblDesbravadores.getSelectedRow();//Buscar valor que estiver selecionado
        txtCodigo.setText(tblDesbravadores.getModel().getValueAt(seleciona, 0).toString());
        txtNome.setText(tblDesbravadores.getModel().getValueAt(seleciona, 1).toString());
        txtTelefone.setText(tblDesbravadores.getModel().getValueAt(seleciona, 2).toString());
        txtEndereco.setText(tblDesbravadores.getModel().getValueAt(seleciona, 3).toString());
    }
    
    public void editarDesbravadores() {
        String sql = "Update usuarios set nome = ?,telefone = ?, endereco = ? where codigo = ?";
        try {
            pst = conecta.prepareStatement(sql);
            pst.setString(1, txtNome.getText());
            pst.setString(2, txtTelefone.getText());
            pst.setString(3, txtEndereco.getText());
            pst.setInt(4, Integer.parseInt(txtCodigo.getText()));
            pst.executeUpdate();
            JOptionPane.showMessageDialog(null, "Cadastro editado com sucesso!!!");
            listarDesbravadores();
        }
        catch(SQLException error) {
            JOptionPane.showMessageDialog(null, error);
        }
    }
    
    public void deletarDesbravadores() {
        String sql = "Delete from usuarios where codigo = ?";
        try {
            pst = conecta.prepareStatement(sql);
            pst.setInt(1, Integer.parseInt(txtCodigo.getText()));
            pst.execute();
            listarDesbravadores();
        }
        catch(SQLException error) {
            JOptionPane.showMessageDialog(null, error);
        }
    }
    
    public void limparCampos() { //Limpar as caixas
        txtCodigo.setText("");
        txtNome.setText("");
        txtTelefone.setText("");
        txtEndereco.setText("");
    }

    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        tblDesbravadores = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        txtCodigo = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        txtNome = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        txtTelefone = new javax.swing.JFormattedTextField();
        jLabel4 = new javax.swing.JLabel();
        txtEndereco = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        txtPesquisar = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();

        setClosable(true);
        setIconifiable(true);
        setTitle("Cadastro de Desbravadores");

        tblDesbravadores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        tblDesbravadores.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblDesbravadoresMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tblDesbravadores);

        jLabel1.setText("Código:");

        txtCodigo.setBackground(new java.awt.Color(0, 0, 0));
        txtCodigo.setEnabled(false);

        jLabel2.setText("Nome:");

        jLabel3.setText("Telefone:");

        try {
            txtTelefone.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("(##)####-####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }

        jLabel4.setText("Endereço:");

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ICONES/user-1.jpg"))); // NOI18N
        jButton1.setText("Cadastrar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ICONES/pencil.jpg"))); // NOI18N
        jButton2.setText("Editar");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ICONES/document-1.jpg"))); // NOI18N
        jButton3.setText("Deletar");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ICONES/cancel.jpg"))); // NOI18N
        jButton4.setText("Limpar");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });

        txtPesquisar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtPesquisarKeyReleased(evt);
            }
        });

        jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/ICONES/cursor.jpg"))); // NOI18N
        jLabel5.setText("Buscar");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jLabel1)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                    .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jLabel2)
                                    .addGap(18, 18, 18)
                                    .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, 410, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jLabel3)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                    .addComponent(txtTelefone, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jLabel4)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                    .addComponent(txtEndereco)))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(txtPesquisar, javax.swing.GroupLayout.PREFERRED_SIZE, 583, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jLabel5)))
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jButton1, jButton2, jButton3, jButton4});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtPesquisar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(txtTelefone, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(txtEndereco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3)
                    .addComponent(jButton4))
                .addContainerGap())
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jButton1, jButton2, jButton3, jButton4});

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jLabel5, txtPesquisar});

        pack();
    }// </editor-fold>                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        editarDesbravadores();
    }                                        

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

    //Evento para quando começar a digitar
    private void txtPesquisarKeyReleased(java.awt.event.KeyEvent evt) {                                         
        pesquisarDesbravadores();
    }                                        

    private void tblDesbravadoresMouseClicked(java.awt.event.MouseEvent evt) {                                              
        mostrarItens();
    }                                             

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        limparCampos();
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        deletarDesbravadores();
    }                                        


    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable tblDesbravadores;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextField txtEndereco;
    private javax.swing.JTextField txtNome;
    private javax.swing.JTextField txtPesquisar;
    private javax.swing.JFormattedTextField txtTelefone;
    // End of variables declaration                   
}

Dê uma pesquisada sobre JOptionPane.showConfirmDialog que nada mais é que uma janela de confirmação.

Como o @4mega já disse deve-se usar o JOptionPane.showConfirmDialog
Ex:

public void cadastrarDesbravadores() {
    //você cria uma variável inteira para armazenar se foi clicado YES ou NO
    int confirm = JOptionPane.showConfirmDialog(null, "Deseja adicionar este desbravador?", "Adicionar", JOptionPane.YES_NO_OPTION);
    if (confirm==JOptionPane.YES_OPTION){
    String sql = "Insert into usuarios(nome, telefone, endereco) values (?,?,?)"; //? > Inserção dinâmica, sem saber o valor
    try {
        pst = conecta.prepareStatement(sql);
        pst.setString(1, txtNome.getText());
        pst.setString(2, txtTelefone.getText());
        pst.setString(3, txtEndereco.getText());

        pst.execute();//Manda executar
        //Mensagem de informação
        JOptionPane.showMessageDialog(null, "Desbravador cadastrado com sucesso!!!", "Confirmação", JOptionPane.INFORMATION_MESSAGE);
        listarDesbravadores(); //Atualiza a janela com as informações dentro dela

    }
    catch(SQLException error) {
        JOptionPane.showMessageDialog(null, error);
    }
}
}

Ai você segue a lógica no deletarDesbravadores.

Obrigado, deu tudo certo aqui.

1 curtida