Pegar valor selecionado na tabela e atualizar

Olá pessoal, eu tenho uma tabela que exibe os alunos cadastrados no banco, e quero selecionar um aluno da tabela e informar que ele não fez aula teorica, como faço isso?

private void atualizar() {

    if(nao.isSelected()){

       aluno.setJaFezAulaTeorica(false);
   }else{
       aluno.setJaFezAulaTeorica(true);
   }
   try {
        alunoDAO.atualizarAlunoPorAula(aluno);

    } catch (SQLException ex) {
        Logger.getLogger(Controledealunos.class.getName()).log(Level.SEVERE, null, ex);
    }
    
}

tenta usar o evento MouseClicked

 private void jTableMouseClicked(java.awt.event.MouseEvent evt) {                                           

        if (!jTable.getRowSelectionAllowed()) {
            JOptionPane.showMessageDialog(null, "Erro ao selecionar dados da tabela!");
        } else {
            //aqui voce pega o codigo do aluno na posição da linha selecionada e coluna 0 (que geralmente fica a coluna do codigo)
            int cod_aluno = Integer.parseInt(jTable.getValueAt(jTable.getSelectedRow(), 0).toString());
           //seta o codigo...
            a.setCodAluno(cod_aluno);
           //chama o metodo que irá trazer os dados do aluno selecionado
            AlunoDAO.getDadosAluno(a);
            //crie um metodo para carregar os seus jTextFields com os dados do aluno que voce clicou
            preencherjTextFields();
        }
    }     

após isso voce atualiza os dados dele e depois passa atraves do seu método e persiste no banco.

public void atualizarAlunoPorAula( Aluno aluno) throws SQLException {
   String sql =  "UPDATE aluno SET  jafezaulateorica=?";
   PreparedStatement smt = conexao.pegarConexao().prepareStatement(sql);
   smt.setBoolean(1, aluno.getJaFezAulaTeorica());

     smt.execute();
     smt.close();
    
}

criei este metodo para o usuario informar se o aluno fez ou não a aula teorica.

e não tenho nenhum parametro do tipo inteiro nesse metodo, por isso tenho dificuldades para pegar o valor da linha selecionada na tabela.

esse metodo in

sua aplicação é web ou desktop? coloque o código completo da classe.

algumas dicas:

  • explique melhor sua pergunta;

  • coloque o código entre a tag code;

[code]private void atualizar() {
if (nao.isSelected()) {
aluno.setJaFezAulaTeorica(false);
} else {
aluno.setJaFezAulaTeorica(true);
}

try {
    alunoDAO.atualizarAlunoPorAula(aluno);
} catch (SQLException ex) {
    Logger.getLogger(Controledealunos.class.getName()).log(Level.SEVERE, null, ex);
}

}[/code]

  • isso é redundante:

if (nao.isSelected()) { aluno.setJaFezAulaTeorica(false); } else { aluno.setJaFezAulaTeorica(true); }

você pode fazer assim:

    aluno.setJaFezAulaTeorica(!nao.isSelected());

É desktop

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Controledealunos.java
 *
 * Created on 10/06/2009, 11:04:43
 */
package autoescola.interfaceusuario;

import autoescola.bancosdedados.AlunoDAO;
import autoescola.modelo.Aluno;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Administrador
 */
public class Controledealunos extends javax.swing.JFrame {
    AlunoDAO alunoDAO = new AlunoDAO();
    Aluno aluno = new Aluno();


    /** Creates new form Controledealunos */
    public Controledealunos() {
        initComponents();
        ImageIcon icone = new ImageIcon("carro.jpg");
        setIconImage(icone.getImage());
        setVisible(true);
        setLocationRelativeTo(null);
    }

   private void atualizar() {
        aluno.setJaFezAulaTeorica(!nao.isSelected()); 
        try {
            alunoDAO.atualizarAlunoPorAula(aluno);
        } catch (SQLException ex) {
            Logger.getLogger(Controledealunos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void atualizarTabela() {
        
        try {
            ArrayList<Aluno> alunos = alunoDAO.buscarTodosAlunos();
            String[] colunas = new String[]{"Nome", "Codigo"};
            Object[][] dados = new Object[alunos.size()][2];
            for (int i = 0; i < alunos.size(); i++) {
                Aluno aluno = alunos.get(i);

                dados[i][0] = aluno.getNome();
                dados[i][1] = aluno.getCodigo();
              
            }

            DefaultTableModel dataModel = new DefaultTableModel(dados, colunas);
            Tabela.setModel(dataModel);

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(this, "Erro " + ex.getMessage());
        }


        Tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    }

    private void excluir() {

        int linha = Tabela.getSelectedRow();
        if (linha != -1) {
            Aluno aluno = new Aluno();
            aluno.setCodigo((Integer) Tabela.getValueAt(linha, 1));
            try {
                alunoDAO.excluir(aluno);
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            atualizarTabela();
        }

    }

    private void TabelaAncestorAdded(javax.swing.event.AncestorEvent evt) {                                     
        // TODO add your handling code here:
        atualizarTabela();
    }                                    

    private void ExcluirActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        excluir();
}                                       

    private void sairActionPerformed(java.awt.event.ActionEvent evt) {                                     
      setVisible(false);
}                                    

    private void BInserirActionPerformed(java.awt.event.ActionEvent evt) {                                         
    atualizar();

}                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Controledealunos().setVisible(true);
            }
        });
    }

}