Comment fermer un jframe sans fermer le programme principal

Je crée un programme pour suivre une liste de DVD. Sur la page principale, j’ai configuré 2 boutons JB. Lorsque l’utilisateur clique sur celui qui dit nouveau, un nouveau JFrame d’une autre classe affiche des champs permettant de saisir des informations sur un nouveau DVD. J’essaie de créer un bouton d’annulation sur ce deuxième cadre de sorte que, lorsque vous cliquez sur le bouton d’annulation, il ramène l’interface graphique principale et ferme la nouvelle interface graphique d’entrée. Le code est ci-dessous, je ne peux pas comprendre comment le faire.

Page principale de l’interface graphique

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(); }//  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 Ssortingng[] { "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 } 

Je pense que vous pouvez également utiliser DISPOSE_ON_CLOSE :

DISPOSE_ON_CLOSE (valeur par défaut pour JInternalFrame)

Masquer et supprimer 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 celle-ci.

Avez-vous lu l’API pour connaître d’autres valeurs pour la méthode setDefaultCloseOperation (…)?

Vous pouvez utiliser:

DISPOSE_ON_CLOSE – le cadre va se fermer. S’il s’agit du dernier cadre ouvert pour l’application, la machine virtuelle Java se termine également.

HIDE_ON_CLOSE – le cadre est simplement défini sur invisible.

Lorsque l’utilisateur clique sur celui qui dit nouvelle une nouvelle image jframe d’une autre classe, il fournit des champs pour entrer des informations sur un nouveau DVD.

Le vrai problème avec 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 dialog pour collecter des informations supplémentaires. Un JDialog ne vous permet pas d’utiliser EXIT_ON_CLOSE.

 frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) 

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 j’ai cliqué sur le bouton qui a fait apparaître le JFrame par la suite, tout l’ancien contenu était toujours là, en plus du nouveau contenu créé en appuyant sur le bouton.

J’ai résolu ce problème en créant une nouvelle instance de JFrame chaque fois que vous appuyez sur le bouton qui ouvre le JFrame.

Pour masquer la fenêtre sans fermer le programme, procédez comme suit:

 f.setVisible(false); 

Si tel est le cas, veillez à utiliser setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); sur votre JFrame lors de l’initialisation, pas setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

  • DISPOSE_ON_CLOSE met fin à votre application lorsque le dernier fichier JFrame est fermé. EXIT_ON_CLOSE mettra fin à votre application dès que ce JFrame sera fermé. HIDE_ON_CLOSE (valeur par défaut) ne mettra pas fin à votre application, même si toutes les images JFrames sont masquées.

Si vous ne faites que masquer le programme à l’aide de HIDE_ON_CLOSE ou de set.Visible(false) , ce n’est pas un très bon choix, car si vous faites quelque chose de plus grand avec plus de frameworks, les frameworks masqués continueront de s’exécuter, ce qui ralentira les performances de l’ordinateur. Comme d’autres l’ont dit, c’est au lieu d’utiliser setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); , qui mettra fin au programme lorsque vous cliquerez sur “X, fermant toutes les images, utilisez les éléments suivants:

 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

Si vous utilisez un bouton comme je pense que vous avez dit que vous étiez

 this.dispose(); 

fera le tour ..

Essayez de mettre this.dispose(); dans la méthode du bouton d’annulation.