Hiding a frame in java upon a button click

21,322

Acording to your code you are trying to hide JPanel instead of JFrame. My suggestion is to use

public class MainPage extends JFrame

than instantiate your JPanel like this:

JPanel panel = new JPanel();

and to add components on that panel. To hide your MainPage you can call:

this.setVisible(false);

but it would be better if you use:

this.dispose();
Share:
21,322
Ivan
Author by

Ivan

Updated on July 09, 2022

Comments

  • Ivan
    Ivan almost 2 years

    I am trying to hide a frame once a button is clicked. The "Register" button should open up a frame where a user can register, and that works, but I am trying to hide the previous frame and I can't figure out how to do it.

    Here's my code:

    MainPage.java

    package Practice_1;
    import java.awt.*;
    import java.awt.Insets;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    /**
     *
     * @author Ivan 
     */
    public class MainPage extends JPanel 
    {
        JButton regButton, logButton, listButton;
        JLabel homeMessage;
        GridBagConstraints gbc = new GridBagConstraints();
    
        public MainPage()
        {
            setLayout(new GridBagLayout());
    
            gbc.insets = new Insets(5,5,5,5);
    
            homeMessage = new JLabel("Please select an option below:");
            gbc.gridx = 0;
            gbc.gridy = 0;
            add(homeMessage, gbc);
    
            regButton = new JButton("Register");
            gbc.gridx = 0;
            gbc.gridy = 1;
            gbc.fill = GridBagConstraints.HORIZONTAL;
    
            regButton.addActionListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent e)
                {
                    //Execute when button is pressed
                    //System.out.println("clicked");
                    RegisterPage regFrame = new RegisterPage();
    
                    JFrame register = new JFrame();
                    register.setTitle("Registration");
                    register.setSize(300,200);
                    register.setVisible(true);
                    register.add(regFrame);
                    new MainPage().setVisible(false);  / THIS DOES NOT WORK
    
                }
            });
            add(regButton, gbc);
    
            logButton = new JButton("Log in");
            gbc.ipadx = 40;
            gbc.gridx = 0;
            gbc.gridy = 2;
            add(logButton, gbc);
    
            listButton = new JButton("Customer list");
            gbc.ipadx = 40;
            gbc.gridx = 0;
            gbc.gridy = 3;
            add(listButton, gbc);
    
            JFrame home = new JFrame();
    
            home.setTitle("Main menu");
            home.setSize(300,200);
            home.setResizable(false);
            home.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            home.setVisible(true);
            home.add (mainFrame);
    
    
        }
    
    
    
    
        public static void main(String[] args) {
            // TODO code application logic here
            MainPage mainFrame = new MainPage();
    
    
    
    
    
        }
    }
    

    RegisterPage.java

    package Practice_1;
    
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    /**
     *
     * @author Ivan
     */
    public class RegisterPage extends JPanel {
    
    
        //JButton regButton, logButton, listButton;
        JLabel homeMessage;
        GridBagConstraints gbc = new GridBagConstraints();
    
        public RegisterPage()
        {
            setLayout(new GridBagLayout());
    
            gbc.insets = new Insets(5,5,5,5);
    
            homeMessage = new JLabel("Register new user:");
            gbc.gridx = 0;
            gbc.gridy = 0;
            add(homeMessage, gbc);
    
    
        }
    
    }
    
    • Hovercraft Full Of Eels
      Hovercraft Full Of Eels over 11 years
      This comes up time and time again. Don't use another JFrame. Have the dialog window be a JDialog.
    • Andrew Thompson
      Andrew Thompson over 11 years
      See The Use of Multiple JFrames, Good/Bad Practice? for more info. on the matter referenced by @HovercraftFullOfEels.
  • user3153014
    user3153014 about 9 years
    I am not able to use 'this' inside ` closeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub //System.exit(0); } });`
  • Branislav Lazic
    Branislav Lazic about 9 years
    @user3153014 Use it like: MainPane.this