Reescrevi um pouco a sua tela.
O TableModel
que você criou, não precisava ser uma classe pública, pode apagar, eu declarei ele dentro da sua tela.
No seu TableModel eu removi os métodos addRow
e removerRow
Não precisa deles.
Eu criei o seguinte método setEventos
pra ser usado quando buscar a lista de objetos Evento
do seu DAO:
public void setEventos(List<Evento> eventosCarregadosDoBanco) {
this.eventos = eventosCarregadosDoBanco;
fireTableDataChanged(); // A JTable é esperta o bastante para repintar apenas as linhas visíveis então, ao contrário do que muitos dizem, esse método não é pesado.
}
Observe como a JTable
foi inicializada dentro do método initComponents
:
// simples assim, não precisa de mais nada
jTable1 = new JTable(new EventoEntarTableModel());
Seu método listar agora ficou assim:
public void Listar() {
try {
// veja que lindo, nada de loops pra adicionar itens
// por isso que DefaultTableModel é um lixo, ele te obriga a ter laços pra adicionar itens
// pôxa, tu já teve o laço pra carregar os itens do banco
// então não tem que fazer laços novamente pra incluir os mesmos itens na JTable
// é só criar um TableModel que apresente estes itens
EventoEntarTableModel modelo = (EventoEntarTableModel) jTable1.getModel();
EventoDAO listarr = new EventoDAO();
modelo.setEventos(listarr.ListarEvento());
} catch (SQLException e) {
e.printStackTrace();
}
}
O fonte completo da sua tela, já com as modificações:
package View;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.AbstractTableModel;
import Model.Bean.Evento;
import Model.Dao.EventoDAO;
import connection.ConnectionFactory;
public class JFrm2Entrar extends javax.swing.JFrame {
public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
Logger.getLogger(JFrm2Entrar.class.getName()).log(Level.SEVERE, null, ex);
}
/* Create and display the form */
java.awt.EventQueue.invokeLater(() -> {
try {
new JFrm2Entrar().setVisible(true);
} catch (SQLException ex) {
Logger.getLogger(JFrm2Entrar.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
/*
* Seu TableModel não precisa ser uma classe pública, ele será usado somente pela JTable presente nesta tela
*/
private class EventoEntarTableModel extends AbstractTableModel {
private String[] colunas = { "id_evento", "nome_evento", "organizador", "Data_Inicio", "Data_Fim" };
private List<Evento> eventos = new ArrayList<>(); // a lista de eventos
@Override
public String getColumnName(int column) {
return colunas[column];
}
@Override
public int getRowCount() {
return eventos.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Object getValueAt(int linha, int coluna) {
Evento evento = eventos.get(linha);
switch (coluna) {
case 0:
return evento.getID();
case 1:
return evento.getNome();
case 2:
return evento.getOrganizador();
case 3:
return evento.getData_Inicio();
case 4:
return evento.getData_Fim();
}
return null;
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
Evento evento = eventos.get(linha);
switch (coluna) {
case 0:
evento.setID(Integer.parseInt((String) valor));
break;
case 1:
evento.setNome((String) valor);
break;
case 2:
evento.setOrganizador((String) valor);
break;
case 3:
evento.setData_Inicio((String) valor);
break;
case 4:
evento.setData_Fim((String) valor);
break;
}
}
public void setEventos(List<Evento> eventosCarregadosDoBanco) {
this.eventos = eventosCarregadosDoBanco;
fireTableDataChanged();
}
}
private ConnectionFactory conecta = new ConnectionFactory();
private Connection con;
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JLabel lblStatus2;
// End of variables declaration
public JFrm2Entrar() throws SQLException {
initComponents();
con = ConnectionFactory.getConnection();
// preencher();
if (con != null) {
lblStatus2.setIcon(new ImageIcon(getClass().getResource("/Imagem/database_add.png")));
} else {
lblStatus2.setIcon(new ImageIcon(getClass().getResource("/Imagem/database_delete.png")));
}
}
public void Listar() {
try {
EventoEntarTableModel modelo = (EventoEntarTableModel) jTable1.getModel();
EventoDAO listarr = new EventoDAO();
modelo.setEventos(listarr.ListarEvento());
} catch (SQLException e) {
e.printStackTrace();
}
}
public void prosseguir() {
if (setar_campo() >= 0) {
JFrm3Menu menu = new JFrm3Menu();
menu.setVisible(true);
this.setVisible(false);
} else {
JOptionPane.showMessageDialog(null, "Selecione um evento.");
}
}
// linha a baixo realizar o procedimento de poder selecinar na tabela
public int setar_campo() {
return jTable1.getSelectedRow();
}
private void formWindowActivated(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
Listar();
}
/**
*
* This method is called from within the constructor to initialize the form.
*
* WARNING: Do NOT modify this code. The content of this method is always
*
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
//
private void initComponents() {
jScrollPane1 = new JScrollPane();
jTable1 = new JTable(new EventoEntarTableModel()); // aqui você diz que essa JTable vai usar o seu TableModel
jLabel1 = new JLabel();
jButton1 = new JButton();
lblStatus2 = new JLabel();
jMenuBar1 = new JMenuBar();
jMenu1 = new JMenu();
jMenuItem1 = new JMenuItem();
jMenu2 = new JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Seleção de Evento");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowActivated(java.awt.event.WindowEvent evt) {
formWindowActivated(evt);
}
});
jScrollPane1.setViewportView(jTable1);
jLabel1.setText("Selecione um evento:");
jButton1.setText("Entrar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
lblStatus2.setIcon(new ImageIcon(getClass().getResource("/Imagem/database_delete.png"))); // NOI18N
jMenu1.setText("Evento");
jMenuItem1.setText("Cadastro");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
jMenu2.setText("Sobre");
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(43, 43, 43)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 452,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)))
.addContainerGap(80, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(lblStatus2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jButton1)
.addGap(34, 34, 34)));
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(15, 15, 15)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 189,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(jButton1)
.addContainerGap(21, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(lblStatus2,
javax.swing.GroupLayout.PREFERRED_SIZE,
26,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap()))));
pack();
}//
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
prosseguir();
}
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
JFrm2_1CadEvento.main(null);
}
}