2016-02-29 98 views
1

我使用netbeans右键单击 - >绑定 - >元素和刷新按钮创建了一个包含绑定到数据库表的jtable的jpanel。 jpanel位于jframe内部的jtabbedpane内。 我想在添加或删除元素后刷新jtable,并厌倦了我在谷歌上找到的很多解决方案,但没有任何适用于我的解决方案。使用org.jdesktop.swingbinding.JTableBinding刷新绑定的jtable

JPanel类的:

public class Formations extends javax.swing.JPanel 
    public Formations() { 
     } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 
     bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); 

     FormationPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("PUfile").createEntityManager(); 
     formationQuery = java.beans.Beans.isDesignTime() ? null : FormationPUEntityManager.createQuery("SELECT f FROM Formation f"); 
     formationList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : formationQuery.getResultList(); 
     btnRefresh = new javax.swing.ColoredButton(); 
     tblContenuFormations = new javax.swing.JTable(){ 
      public boolean isCellEditable(int row, int column) { 
       return false; 
      } 
     }; 

     org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, formationList, tblContenuFormations); 
     org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${theme}")); 
     columnBinding.setColumnName("Col1"); 
     columnBinding.setColumnClass(String.class); 
     columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${Col1}")); 
     columnBinding.setColumnName("Col2"); 
     columnBinding.setColumnClass(String.class); 
     columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${Col2}")); 
     columnBinding.setColumnName("Col3"); 
     columnBinding.setColumnClass(String.class); 
     columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${Col3}")); 
     columnBinding.setColumnName("Col4"); 
     columnBinding.setColumnClass(java.util.Collection.class); 
     bindingGroup.addBinding(jTableBinding); 
     jTableBinding.bind(); 
     tblContenuFormations.addPropertyChangeListener(new java.beans.PropertyChangeListener() { 
      public void propertyChange(java.beans.PropertyChangeEvent evt) { 
       tblContenuFormationsPropertyChange(evt); 
      } 
     }); 
     jScrollPane1.setViewportView(tblContenuFormations); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); 
     this.setLayout(layout); 
     layout.setHorizontalGroup(....)); 

     bindingGroup.bind(); 
    }      

    private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {              
     //here goes the refresh code 
    }                          

    // Variables declaration - do not modify      
    private javax.persistence.EntityManager FormationPUEntityManager; 
    private javax.swing.JButton btnRefresh; 
    private java.util.List<dz.pcmax.entities.Formation> formationList; 
    private javax.persistence.Query formationQuery; 
    private javax.swing.JScrollPane jScrollPane1; 
    private org.jdesktop.beansbinding.BindingGroup bindingGroup; 
    // End of variables declaration     
} 

溶液我尝试:

private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {              
      Binding g = bindingGroup.getBindings().get(0); 
      g.unbind(); 
      g.bind(); 
    } 
private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {              
      Binding g = bindingGroup.getBindings().get(0); 
      g.unbind(); 
      g.bind(); 
      this.validate(); 
      this.repaint(); 
    } 
private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {              
     org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, formationList, tblContenuFormations); 
     org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${theme}")); 
     columnBinding.setColumnName("Theme"); 
     columnBinding.setColumnClass(String.class); 
     columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${description}")); 
     columnBinding.setColumnName("Description"); 
     columnBinding.setColumnClass(String.class); 
     columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${objectifs}")); 
     columnBinding.setColumnName("Objectifs"); 
     columnBinding.setColumnClass(String.class); 
     columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${niveauCollection}")); 
     columnBinding.setColumnName("Niveau Collection"); 
     columnBinding.setColumnClass(java.util.Collection.class); 
     bindingGroup.addBinding(jTableBinding); 
     jTableBinding.bind(); 
     getTopLevelAncestor().revalidate(); 
     getTopLevelAncestor().repaint(); 
    } 

回答

0

尝试

g.unbind(); 
g.setSourceObject(formationList); 
g.bind();