No View Eleitor, vá nas propriedades da tabela e em model, coloque as colunas referentes para ID, nome, CPF, CEP, Rua, Bairro e Número, e tire a opção editable deles. Também deixe o Rows como 0.
Altere o name da tabela para paneEle e altere o construtor assim, para permitir ordenação:
public ViewEleitor() {
initComponents();
DefaultTableModel mode = (DefaultTableModel)paneEle.getModel(); // Importe javax.swing.table.DefaultTableModel
paneEle.setRowSorter(new TableRowSorter(mode)); // Importe javax.swing.table.TableRowSorter
}
Vamos criar a classe EleitorDAO em model.dao, com esse código:
package model.dao;
import connection.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import model.bean.Eleitor;
public class EleitorDAO {
private Connection con = null; // Importar java.sql.Connection
public EleitorDAO() {
con = ConnectionFactory.getConnection(); // Importar connection.ConnectionFactory
}
public void create(Eleitor e) {
PreparedStatement stmt = null;
String sql = "insert into eleitor (nome, cpf, cep, rua, bairro, numero) values (?, ?, ?, ?, ?, ?)"; // Inserir os dados do SQL.
try {
stmt = con.prepareStatement(sql);
stmt.setString(1, e.getNome());
stmt.setString(2, e.getCpf());
stmt.setString(3, e.getCep());
stmt.setString(4, e.getRua());
stmt.setString(5, e.getBairro());
stmt.setInt(6, e.getNumero());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Salvo com Sucesso!", "Informação", JOptionPane.INFORMATION_MESSAGE);
}
catch(SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao Salvar!\n\n" + ex, "Erro", JOptionPane.ERROR_MESSAGE);
}
finally {
ConnectionFactory.closeConnection(con, stmt);
}
}
}
E no action do botão Salvar, em ViewEleitor:
if(txtNome.getText().trim().equals("") || txtCPF.getText().trim().length() != 14 || txtCEP.getText().trim().length() != 9 || txtRua.getText().trim().equals("") || txtBair.getText().trim().equals("")) {
JOptionPane.showMessageDialog(null, "Preencha Todos os Campos!", "Aviso", JOptionPane.WARNING_MESSAGE);
}
else {
Eleitor e = new Eleitor(); // Importe
EleitorDAO dao = new EleitorDAO(); // Importe
e.setNome(txtNome.getText().trim());
e.setCpf(txtCPF.getText().trim());
e.setCep(txtCEP.getText().trim());
e.setRua(txtRua.getText().trim());
e.setBairro(txtBair.getText().trim());
e.setNumero((int)numEle.getValue());
dao.create(e);
txtNome.setText("");
txtCPF.setText("");
txtCEP.setText("");
txtRua.setText("");
txtBair.setText("");
numEle.setValue(0);
}
Vá em EleitorDAO e coloque esse método:
public List<Eleitor> read() { // Importe java.util.List
PreparedStatement stmt = null;
ResultSet rs = null; // Importe
String sql = "select * from eleitor";
List<Eleitor> eleitores = new ArrayList<>();
try {
stmt = con.prepareStatement(sql);
rs = stmt.executeQuery();
while(rs.next()) {
Eleitor elei = new Eleitor();
elei.setId(rs.getInt("id"));
elei.setNome(rs.getString("nome"));
elei.setCpf(rs.getString("cpf"));
elei.setCep(rs.getString("cep"));
elei.setRua(rs.getString("rua"));
elei.setBairro(rs.getString("bairro"));
elei.setNumero(rs.getInt("numero"));
eleitores.add(elei);
}
}
catch(SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao Consultar!\n\n" + ex, "Erro", JOptionPane.ERROR_MESSAGE);
}
finally {
ConnectionFactory.closeConnection(con, stmt, rs);
}
return eleitores;
}
No código do frame do ViewEleitor, crie esse método:
public void lerTable() {
DefaultTableModel mode = (DefaultTableModel)paneEle.getModel();
EleitorDAO edao = new EleitorDAO();
mode.setNumRows(0); // Isso é pra evitar duplicação nas consultas.
for(Eleitor e: edao.read()) {
mode.addRow(new Object[] {
e.getId(),
e.getNome(),
e.getCpf(),
e.getCep(),
e.getRua(),
e.getBairro(),
e.getNumero()
});
}
}
E no construtor, coloque a invocação desse método simplesmente com this.lerTable();
. A mesma invocação também será colocada no action do botão salvar, abaixo do dao.create() (dentro dos if, caso existam, na última linha).
Crie em EleitorDAO esse método:
public void delete(Eleitor e) {
PreparedStatement stmt = null;
String sql = "delete from eleitor where id = ?"; // Inserir os dados do SQL.
try {
stmt = con.prepareStatement(sql);
stmt.setInt(1, e.getId());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Excluído com Sucesso!", "Informação", JOptionPane.INFORMATION_MESSAGE);
}
catch(SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao Excluir!\n\n" + ex, "Erro", JOptionPane.ERROR_MESSAGE);
}
finally {
ConnectionFactory.closeConnection(con, stmt);
}
}
E simplesmente coloque esse código no evento do botão excluir:
private void btnExclActionPerformed(java.awt.event.ActionEvent evt) {
if(paneEle.getSelectedRow() != -1) {
Eleitor elei = new Eleitor(); // Importe
EleitorDAO dao = new EleitorDAO(); // Importe
elei.setId((int)paneEle.getValueAt(paneEle.getSelectedRow(), 0));
dao.delete(elei);
txtNome.setText("");
txtCPF.setText("");
txtCEP.setText("");
txtRua.setText("");
txtBair.setText("");
numEle.setValue(0);
this.lerTable();
}
else {
JOptionPane.showMessageDialog(null, "Selecione algum item para excluir!", "Aviso", JOptionPane.WARNING_MESSAGE); // Importe javax.swing.JOptionPane
}
}
Abra os Views de Eleitor, Urna e Candidado, e nas propriedades deles coloque a opção DISPOSE em defaultCloseOperation:
Adicione os eventos nos botões de Eleitor, Urna e Candidado no ViewPrincipal. Esse é o código de um deles:
new ViewEleitor().setVisible(true);
Abra o frame ViewEleitor e coloque esse código no evento do botão Novo:
txtNome.setText("");
txtCPF.setText("");
txtCEP.setText("");
txtRua.setText("");
txtBair.setText("");
numEle.setValue(0);
Os outros botões trabalharemos depois.