Alvino
Novembro 13, 2010, 7:35pm
#1
Pessoal,
Estou usando o Netbeans para criar um pequeno projeto Desktop, usando JPA para manipular o banco de dados. Eu adiciono os dados do banco em uma tabela e faço o vínculo dos jTextFields com estas informações (Isso usando o próprio Netbeans). O problema está na hora de inserir e deletar dados. Nos métodos que criei, após as alterações, ocorre o erro: java.lang.IndexOutOfBoundsException. É como se a jTable não reconhecesse as alterações efetuadas, como a inclusão de um novo registro. Essas alterações efetuadas na lista de dados que carregam a Jtable são monitoradas automaticamente ou eu tenho que informa-las sempre para a tabela?? Alguém sabe como posso solucionar o problema??
Alvino
Novembro 15, 2010, 12:43am
#2
Bom pessoal, vou postar o código para ver se alguém consegue ajudar…
package za;
import org.jdesktop.application.Action;
public class NewJFrame extends javax.swing.JFrame {
/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();
}
/** 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")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
imPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("imPU").createEntityManager();
usuarioQuery = java.beans.Beans.isDesignTime() ? null : imPUEntityManager.createQuery("SELECT u FROM Usuario u");
usuarioList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : usuarioQuery.getResultList();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, usuarioList, jTable1);
org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${codigo}"));
columnBinding.setColumnName("Codigo");
columnBinding.setColumnClass(Integer.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${nome}"));
columnBinding.setColumnName("Nome");
columnBinding.setColumnClass(String.class);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${usuario}"));
columnBinding.setColumnName("Usuario");
columnBinding.setColumnClass(String.class);
bindingGroup.addBinding(jTableBinding);
jTableBinding.bind();
jScrollPane1.setViewportView(jTable1);
javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(NewJFrame.class, this);
jButton1.setAction(actionMap.get("NovoRegistro")); // NOI18N
jButton1.setText("Novo");
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(15, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jButton1)
.addContainerGap(78, Short.MAX_VALUE))
);
bindingGroup.bind();
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
@Action
public void NovoRegistro() {
za.Usuario l = new za.Usuario();
imPUEntityManager.persist(l);
usuarioList.add(l);
int row = usuarioList.size()-1;
jTable1.setRowSelectionInterval(row, row);
jTable1.scrollRectToVisible(jTable1.getCellRect(row, 0, true));
}
// Variables declaration - do not modify
private javax.persistence.EntityManager imPUEntityManager;
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private java.util.List<za.Usuario> usuarioList;
private javax.persistence.Query usuarioQuery;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration
}
Ao executar o método NovoRegistro(), aparece o erro: java.lang.IndexOutOfBoundsException. Alguém sabe onde estou errando???
Abraços…