2010-11-24 8 views
9

Je crée un programme pour suivre une liste de DVD. Sur la page principale j'ai mis en place 2 JButtons. Lorsque l'utilisateur clique sur celui qui dit nouveau, un nouveau JFrame d'une autre classe arrive avec des champs pour entrer des informations sur un nouveau DVD. J'essaie de faire un bouton d'annulation sur cette deuxième image de travail de sorte que quand on clique sur le bouton d'annulation, il ramène l'interface graphique principale et ferme la nouvelle interface utilisateur graphique. Le code est ci-dessous, je ne peux pas comprendre comment le faire.Comment fermer une jframe sans fermer le programme principal

Page GUI principale

package dvdlibrary; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 


public class bootPage extends javax.swing.JFrame { 

    /** Creates new form bootPage */ 
    public bootPage() { 
     initComponents(); 
    } 



    @SuppressWarnings("unchecked") 

    private void initComponents() { 

     jLabel1 = new javax.swing.JLabel(); 
     jLabel2 = new javax.swing.JLabel(); 
     jButton1 = new javax.swing.JButton(); 
     jButton2 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 

     jLabel1.setText("DVD Library"); 
     getContentPane().add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(168, 11, -1, -1)); 

     jLabel2.setText("What would you like to do today?"); 
     getContentPane().add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(113, 70, -1, -1)); 

     jButton1.setText("Create Record"); 
     jButton1.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jButton1MouseClicked(evt); 
      } 
     }); 
     jButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jButton1ActionPerformed(evt); 
      } 
     }); 
     getContentPane().add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(50, 135, -1, -1)); 

     jButton2.setText("View Library"); 
     jButton2.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jButton2MouseClicked(evt); 
      } 
     }); 
     getContentPane().add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(224, 135, 111, -1)); 

     pack(); 
    }// </editor-fold>       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           




    }           

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {          
     if(evt.getSource()== jButton1) 
      dvdlibrary.createEntry.createE(); 


    }          

    private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {          
     if(evt.getSource()== jButton2) 
      dvdlibrary.movieChooser.movChoo(); 
    }          


    public static void bootP() { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new bootPage().setVisible(true); 
       new bootPage().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 


} 

Créer une page d'entrée

package dvdlibrary; 

public class createEntry extends javax.swing.JFrame { 


    public createEntry() { 
     initComponents(); 
    } 


    @SuppressWarnings("unchecked") 

    private void initComponents() { 

     jLabel1 = new javax.swing.JLabel(); 
     jLabel2 = new javax.swing.JLabel(); 
     jLabel3 = new javax.swing.JLabel(); 
     jLabel4 = new javax.swing.JLabel(); 
     jLabel5 = new javax.swing.JLabel(); 
     jLabel6 = new javax.swing.JLabel(); 
     jTextField1 = new javax.swing.JTextField(); 
     jComboBox1 = new javax.swing.JComboBox(); 
     jTextField2 = new javax.swing.JTextField(); 
     jTextField3 = new javax.swing.JTextField(); 
     jTextField4 = new javax.swing.JTextField(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     jTextArea1 = new javax.swing.JTextArea(); 
     jButton1 = new javax.swing.JButton(); 
     jButton2 = new javax.swing.JButton(); 
     jButton3 = new javax.swing.JButton(); 
     jButton4 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jLabel1.setText("Title"); 

     jLabel2.setText("Genre"); 

     jLabel3.setText("Length"); 

     jLabel4.setText("Rating"); 

     jLabel5.setText("Description"); 

     jLabel6.setText("Year"); 

     jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); 

     jTextArea1.setColumns(20); 
     jTextArea1.setRows(5); 
     jScrollPane1.setViewportView(jTextArea1); 

     jButton1.setText("Input"); 

     jButton2.setText("Load"); 

     jButton3.setText("Save"); 

     jButton4.setText("Cancel"); 
     jButton4.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jButton4MouseClicked(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.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(19, 19, 19) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(jLabel5) 
          .addGroup(layout.createSequentialGroup() 
           .addComponent(jLabel2) 
           .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
           .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
          .addGroup(layout.createSequentialGroup() 
           .addComponent(jLabel1) 
           .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
           .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 174, Short.MAX_VALUE)) 
          .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
           .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
            .addComponent(jLabel3) 
            .addComponent(jLabel4) 
            .addComponent(jLabel6)) 
           .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 32, Short.MAX_VALUE) 
           .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
            .addComponent(jTextField2) 
            .addComponent(jTextField4) 
            .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE))))) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(51, 51, 51) 
         .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(124, 124, 124) 
         .addComponent(jButton1)) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(45, 45, 45) 
         .addComponent(jButton4) 
         .addGap(18, 18, 18) 
         .addComponent(jButton2) 
         .addGap(18, 18, 18) 
         .addComponent(jButton3))) 
       .addGap(23, 23, 23)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(38, 38, 38) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jLabel1) 
        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jButton1)) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
        .addGroup(layout.createSequentialGroup() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(jLabel2) 
          .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGap(26, 26, 26) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(jLabel6) 
          .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGap(29, 29, 29) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(jLabel3) 
          .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGap(37, 37, 37) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(jLabel4) 
          .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGap(39, 39, 39) 
         .addComponent(jLabel5) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
         .addComponent(jButton3) 
         .addComponent(jButton2) 
         .addComponent(jButton4))) 
       .addContainerGap()) 
     ); 

     pack(); 
    }      

    private void jButton4MouseClicked(java.awt.event.MouseEvent evt) {          


    }          


    public static void createE() { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new createEntry().setVisible(true); 

      } 
     }); 
    } 


    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JButton jButton3; 
    private javax.swing.JButton jButton4; 
    private javax.swing.JComboBox jComboBox1; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JLabel jLabel4; 
    private javax.swing.JLabel jLabel5; 
    private javax.swing.JLabel jLabel6; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JTextArea jTextArea1; 
    private javax.swing.JTextField jTextField1; 
    private javax.swing.JTextField jTextField2; 
    private javax.swing.JTextField jTextField3; 
    private javax.swing.JTextField jTextField4; 
    // End of variables declaration     

} 

Répondre

2
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) 
+1

ok, méthode bouton d'annulation. i changé que dans le cadre SETT mais je ne peux plus fermer la fenêtre. Quel codage puis-je utiliser pour que le bouton Annuler ferme la fenêtre. SUDO si actionperformed == bouton d'annulation Jframe.createEntry.Close ou quelque chose comme ça – Jon

+0

frame.setVisible (false); frame.dispose() – dacwe

14

Je pense que vous pouvez également utiliser DISPOSE_ON_CLOSE:

DISPOSE_ON_CLOSE (la valeur par défaut pour JInternalFrame)

Masquer et éliminer la fenêtre lorsque l'utilisateur la ferme. Cela supprime la fenêtre de l'écran et libère toutes les ressources utilisées par celui-ci.

6

Avez-vous lu l'API pour trouver d'autres valeurs pour la méthode setDefaultCloseOperation (...)?

Vous pouvez utiliser:

DISPOSE_ON_CLOSE - le cadre fermera. S'il s'agit du dernier cadre ouvert pour l'application, la JVM se termine également

HIDE_ON_CLOSE - le cadre est simplement défini sur invisible. Lorsque l'utilisateur clique sur celui qui dit nouveau, une nouvelle jframe d'une autre classe arrive avec des champs pour entrer des informations sur un nouveau DVD. Le vrai problème de votre programme est que vous utilisez un cadre comme fenêtre contextuelle. Vous devriez utiliser un JDialog modal. Une application ne doit jamais avoir qu'un seul JFrame avec plusieurs boîtes de dialogue pour collecter des informations supplémentaires. Un JDialog ne vous permet pas d'utiliser EXIT_ON_CLOSE.

+0

Merci, il jette un oeil à ça et re travailler! – Jon

1

J'ai eu un problème similaire et utilisé jFrameInstanceVariable.setVisible(false); comme l'action qui s'est produite lorsque j'ai appuyé sur le bouton ANNULER. Mais chaque fois que je cliquais sur le bouton qui apparaissait sur le JFrame par la suite, tout le vieux contenu était toujours là en plus du nouveau contenu créé en appuyant sur le bouton.

J'ai corrigé cela en créant une nouvelle instance de JFrame chaque fois que le bouton est enfoncé pour faire apparaître le JFrame.

1

Pour masquer la fenêtre sans se fermer en fait le programme, faire:

f.setVisible(false); 
1

Si tel est le cas, assurez-vous d'utiliser setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); sur votre JFrame lors de l'initialisation, et non setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

  • DISPOSE_ON_CLOSE mettra fin à votre application lorsque la dernière JFrame est fermé.EXIT_ON_CLOSE mettra fin à votre application dès que que JFrame est fermé. HIDE_ON_CLOSE (par défaut) ne terminera pas votre application même si tous les JFrames sont cachés.
1

Si vous venez de cacher le programme, en utilisant HIDE_ON_CLOSE ou set.Visible(false), ce n'est pas un très bon choix, parce que si vous faites quelque chose de plus avec plus de cadres, les cadres cachés seront toujours en cours d'exécution, ce qui ralentit les performances de l'ordinateur. La façon, comme d'autres l'ont dit, est au lieu d'utiliser setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);, qui mettra fin au programme lorsque vous cliquez sur « X, la fermeture de toutes les images, utilisez les éléments suivants:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
0

Si votre aide d'un bouton comme je pense vous avez dit que vous étiez

this.dispose(); 

fera l'affaire ..

0

Essayez de mettre this.dispose(); dans la

Questions connexes