title: how to close a frame when button clicks
body: <p>I am new to Java Swing. I am creating a frame with some components.</p>
  
  <p>I have to close the frame and open another frame when the button is clicked. I had tried <code>setVisible(false)</code> but it only hides the frame, not closing it. When I use <code>System.exit(0)</code>, it closed all the frames.</p>
  
  <p>I had tried in another way, i.e. add all the components to panel, and add the panel at first. When the frame has to close I just remove those components in actionListener and add the other components for the corresponding next process.</p>
  
  <p>My entire code is as follows:</p>
  
  <pre><code>package JavaApp;
  
  import java.awt.Component;
  import java.awt.GridLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.io.IOException;
  import java.security.NoSuchAlgorithmException;
  import java.util.logging.Level;
  import java.util.logging.Logger;
  import javax.crypto.IllegalBlockSizeException;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JLabel;
  import javax.swing.JOptionPane;
  import javax.swing.JPanel;
  import javax.swing.JPasswordField;
  import javax.swing.JTextField;
  import javax.swing.SwingUtilities;
  
  
  public class Login extends JFrame {
  
      public static JLabel labelUser;
      public static JLabel labelPass;
      public static JTextField textFieldUser;
      public static JPasswordField passwordField;
      public static JButton clear;
      public static JButton buttonLogin;
      public static JButton ChangePassword;
      public static JButton MasterKey;
      public static JButton AppKey;
      public static JPanel panelGnereate;
      public static JPanel panelLogin;
      public static JFrame frame;
      public static JLabel UserName;
      public static JTextField UserTxt;
      public static JButton GenerateKey;
      public static JPanel panelMaster;
  
      private static void designUI() {
  
          frame = new JFrame("Instalation");
  
          frame.setLayout(new GridLayout(2, 1));
  
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
          panelLogin = new JPanel();
          panelLogin.setLayout(null);
          labelUser = new JLabel("Enter UserName");
          textFieldUser = new JTextField(10);
          labelPass = new JLabel("Enter Password");
          passwordField = new JPasswordField(10);
          buttonLogin = new JButton("Login");
          clear = new JButton("Cancel");
          panelLogin.add(buttonLogin);
          panelLogin.add(clear);
          panelLogin.add(labelUser);
          panelLogin.add(textFieldUser);
          panelLogin.add(labelPass);
          panelLogin.add(passwordField);
          textFieldUser.setBounds(200, 120, 100, 20);
          labelUser.setBounds(50, 120, 120, 20);
          labelPass.setBounds(50, 150, 120, 20);
          passwordField.setBounds(200, 150, 100, 20);
          buttonLogin.setBounds(70, 180, 100, 20);
          clear.setBounds(200, 180, 100, 20);
          buttonLogin.addActionListener(actionEvent);
          clear.addActionListener(actionEvent);
          frame.add(panelLogin);
          //Login frame ends...
  
          //Gnereate frame starts here..
  
          panelGnereate = new JPanel();
          panelGnereate.setLayout(null);
          ChangePassword = new JButton("Change Password");
          MasterKey = new JButton("Create Master Key");
          AppKey = new JButton("Create Application key");
          panelGnereate.add(ChangePassword);
          panelGnereate.add(MasterKey);
          panelGnereate.add(AppKey);
          ChangePassword.setBounds(150, 100, 200, 25);
          MasterKey.setBounds(150, 150, 200, 25);
          AppKey.setBounds(150, 200, 200, 25);
  
          ChangePassword.addActionListener(actionEvent);
          MasterKey.addActionListener(actionEvent);
          AppKey.addActionListener(actionEvent);
          //Gnerate Frame ends here..
  
  
          //MasterKey Generate Starts Here..
  
          panelMaster = new JPanel();
          panelMaster.setLayout(null);
          UserName = new JLabel("Text");
          UserTxt = new JTextField(20);
          GenerateKey = new JButton("Generate Key");
          panelMaster.add(UserName);
          panelMaster.add(UserTxt);
          panelMaster.add(GenerateKey);
          UserName.setBounds(150, 150, 50, 25);
          UserTxt.setBounds(220, 150, 100, 25);
          GenerateKey.setBounds(180, 180, 150, 25);
          GenerateKey.addActionListener(actionEvent);
  
  
          frame.setSize(500, 500);
          frame.setVisible(true);
      }
  
  
      public static void main(String args[]) {
  
           designUI();
  
      }
      private static ActionListener actionEvent = new ActionListener() {
  
          public void actionPerformed(ActionEvent e) {
              String action = e.getActionCommand();
              if ("Login".equals(action)) {
                  System.out.println("Login action" + e.getActionCommand());
                  if ("".equals(textFieldUser.getText()) || "".equals(passwordField.getText())) {
                      JOptionPane.showMessageDialog(null,
                              "Enter Both UserName and Password");
  
                  } else if ("admin".equals(textFieldUser.getText()) &amp;&amp; "admin".equals(passwordField.getText())) {
  
  
                      System.out.println("login value" + textFieldUser.getText() + "     " + passwordField.getText());
                      frame.remove(panelLogin);
                      frame.add(panelGnereate);
                      frame.setVisible(true);
                  } else {
                      JOptionPane.showMessageDialog(null,
                              "Wrong Password");
  
                  }
              } else if ("Cancel".equals(action)) {
                  System.out.println(e.getActionCommand());
                  System.exit(0);
  
              } else if ("Change Password".equals(action)) {
  
              } else if ("Create Master Key".equals(action)) {
                  frame.remove(panelGnereate);
                 frame.add(panelMaster);
  
                  frame.setVisible(true);
              } else if ("Create Application key".equals(action)) {
                  System.out.println("Message " + UserTxt.getText());
  
                  frame.setVisible(false);
              }else if("Generate Key".equals(action))
              {
                  try {
                      new GenerateTxt(UserTxt.getText());
                  } catch (NoSuchAlgorithmException ex) {
                      Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
                  } catch (IllegalBlockSizeException ex) {
                      Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
                  } catch (IOException ex) {
                      Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
                  }
  
                  frame.remove(panelMaster);
                  frame.add(panelGnereate);
                   frame.setVisible(true);
              }
          }
          ;
  
      };
  }
  </code></pre>
  
  <p>It's not working for throughout the process. When I click the master key it showing relevant textbox after  clicking genearteKey it showing same panel not the previous one. But when I am moving the mouse over there it is showing the components of the both panels.</p>