2010-11-24 50 views
9

Estoy creando un programa para hacer un seguimiento de una lista de DVD. En la página principal, he configurado 2 JButtons. Cuando el usuario hace clic en el que dice nuevo, aparece un nuevo JFrame de otra clase con campos para ingresar información sobre un nuevo DVD. Estoy intentando hacer que un botón de cancelar en este segundo fotograma trabaje de modo que cuando uno hace clic en el botón de cancelar, recupera la GUI principal y cierra la nueva GUI de entrada. El código está abajo, no puedo entender cómo hacerlo. páginaCómo cerrar un jframe sin cerrar el programa principal

principal de la GUI

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; 


} 

Crear página de entrada

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     

} 

Respuesta

2
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) 
+1

bien, he cambiado de que en el marco de pavimiento ings, pero ahora no puedo cerrar la ventana en absoluto. ¿Qué codificación puedo usar para que el botón cancelar cierre la ventana? SUDO si actionperformed == cancel button Jframe.createEntry.Close o algo así – Jon

+0

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

14

Creo que también se puede utilizar DISPOSE_ON_CLOSE:

DISPOSE_ON_CLOSE (el valor predeterminado para JInternalFrame)

Oculte y deseche la ventana cuando el usuario la cierre. Esto elimina la ventana de la pantalla y libera los recursos que usa.

6

¿Leyó la API para averiguar otros valores para el método setDefaultCloseOperation (...)?

Se puede utilizar:

DISPOSE_ON_CLOSE - el bastidor se cerrará. Si este es el último marco abierto para la aplicación, entonces la JVM también terminará

HIDE_ON_CLOSE - el marco está configurado como invisible.

cuando el usuario hace clic en el que dice que un nuevo jframe nuevo de otra clase aparece con campos para ingresar información sobre un nuevo dvd.

El verdadero problema con su programa es que está utilizando un marco como ventana emergente. Debería utilizar un JDialog modal. Una aplicación solo debe tener un solo JFrame con varios cuadros de diálogo para recopilar información adicional. Un JDialog no le permite usar EXIT_ON_CLOSE.

+0

¡Gracias, échale un vistazo y vuelve a trabajar! – Jon

1

Tuve un problema similar y usé jFrameInstanceVariable.setVisible(false); como la acción que ocurrió cuando presioné mi botón CANCELAR. Pero cada vez que hacía clic en el botón que aparecía JFrame después, todo el contenido anterior seguía allí, además del nuevo contenido creado al presionar el botón.

Lo solucioné creando una nueva instancia de JFrame cada vez que se presiona el botón que aparece en el JFrame.

1

Para ocultar la ventana sin que realmente cerrar el programa, hacer:

f.setVisible(false); 
1

Si este es el caso, asegúrese de utilizar setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); en su JFrame al inicializar, no setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

  • DISPOSE_ON_CLOSE dará por terminado su aplicación cuando el último JFrame está cerrado.EXIT_ON_CLOSE finalizará su aplicación tan pronto como cierre de JFrame. HIDE_ON_CLOSE (predeterminado) no terminará su aplicación , incluso si todos los JFrames están ocultos.
1

Si sólo ocultar el programa, utilizando HIDE_ON_CLOSE o set.Visible(false), que no es una muy buena elección, ya que si se hace algo más grande con más tramas, las tramas ocultas seguirán funcionando, lo que frena el rendimiento del equipo. La forma, como otros han dicho, es en lugar de utilizar setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);, que terminará el programa al hacer clic en "X, cerrando todos los fotogramas, utilice la siguiente:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
0

Si su uso como un botón pienso habías dicho que eras

this.dispose(); 

hará el truco ..

0

Trate de poner this.dispose(); dentro del método botón de cancelación.

Cuestiones relacionadas