Erro jTable ao manipular banco de dados usando Netbeans e JPA
1 resposta
A
Alvino
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??
Bom pessoal, vou postar o código para ver se alguém consegue ajudar…
packageza;importorg.jdesktop.application.Action;publicclassNewJFrameextendsjavax.swing.JFrame{/** Creates new form NewJFrame */publicNewJFrame(){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">privatevoidinitComponents(){bindingGroup=neworg.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=newjavax.swing.JScrollPane();jTable1=newjavax.swing.JTable();jButton1=newjavax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);org.jdesktop.swingbinding.JTableBindingjTableBinding=org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE,usuarioList,jTable1);org.jdesktop.swingbinding.JTableBinding.ColumnBindingcolumnBinding=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.ActionMapactionMap=org.jdesktop.application.Application.getInstance().getContext().getActionMap(NewJFrame.class,this);jButton1.setAction(actionMap.get("NovoRegistro"));// NOI18NjButton1.setText("Novo");javax.swing.GroupLayoutlayout=newjavax.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 */publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newNewJFrame().setVisible(true);}});}@ActionpublicvoidNovoRegistro(){za.Usuariol=newza.Usuario();imPUEntityManager.persist(l);usuarioList.add(l);introw=usuarioList.size()-1;jTable1.setRowSelectionInterval(row,row);jTable1.scrollRectToVisible(jTable1.getCellRect(row,0,true));}// Variables declaration - do not modifyprivatejavax.persistence.EntityManagerimPUEntityManager;privatejavax.swing.JButtonjButton1;privatejavax.swing.JScrollPanejScrollPane1;privatejavax.swing.JTablejTable1;privatejava.util.List<za.Usuario>usuarioList;privatejavax.persistence.QueryusuarioQuery;privateorg.jdesktop.beansbinding.BindingGroupbindingGroup;// End of variables declaration}
Ao executar o método NovoRegistro(), aparece o erro: java.lang.IndexOutOfBoundsException. Alguém sabe onde estou errando???