2013-03-07 2 views
0

J'ai un cadre interne, mais chaque fois que n'importe quel cadre interne est activé les valeurs dans la zone de liste déroulante est dupliquée dans la liste déroulante, comment éviter cela ??Quel sera l'événement approprié dans ce code dans netbeans?

En fait, mon problème est à chaque fois que d'autres cadres internes sont activés, la zone de liste déroulante commence la duplication

private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) { 

try 
    { 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    Connection con= DriverManager.getConnection("jdbc:odbc:ref","sa","[email protected]"); 
    Statement st1=con.createStatement(); 
    ResultSet rs1=st1.executeQuery("select opid from patient"); 
    while(rs1.next()) 
    { 
     opid_combo.addItem(rs1.getString(1)); 
    }} 

    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
+0

Essayez d'effacer la liste déroulante avant d'y ajouter les chaînes. –

+0

Aussi, quelle méthode contient le code ci-dessus? –

Répondre

2

Vous devez effacer les valeurs de combobox avant de les recharger ...

private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) { 
    // Remove items first 
    opid_combo.removeAllItems() 
    try 
    { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     Connection con= DriverManager.getConnection("jdbc:odbc:ref","sa","[email protected]"); 
     Statement st1=con.createStatement(); 
     ResultSet rs1=st1.executeQuery("select opid from patient"); 
     while(rs1.next()) 
     { 
      opid_combo.addItem(rs1.getString(1)); 
     } 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
} 

Nit Choisissez

Et pendant que je suis ici. Ce n'est probablement pas une très bonne idée de recharger les éléments CHAQUE fois que le cadre est activé. Si vous avez besoin que la zone de liste déroulante soit rechargée à un moment donné, vous devriez probablement fournir une option "refresh".

En outre, ce n'est pas une très bonne idée de le faire dans le contexte du thread de distribution d'événements, car cela va mettre votre application en pause chaque fois que vous changez d'image. Au lieu de cela, utiliser quelque chose comme un SwingWorker pour charger les valeurs en arrière-plan

+0

+1, pour le pick nit. – camickr

2

mon problème est à chaque fois que d'autres cadres internes sont activés, la zone de liste déroulante la copie commence

Ne pas charger les données dans le internalFrameActivated événement. Au lieu de cela, utilisez l'événement internalFrameOpened et cela ne devrait être fait que la première fois.

Questions connexes