frame 2 inside frame 1

后端 未结 2 1849
鱼传尺愫
鱼传尺愫 2021-01-16 22:39

I have 2 classes; Students and RegisterStudents, and hence 2 different main_panel(Class 1) and panel_1 (Class 2). What I am trying to do is, when a button on the Students In

2条回答
  •  生来不讨喜
    2021-01-16 23:31

    For such things I would suggest you to use CardLayout When you add something to the container, you must call revalidate() and repaint() methods to realize the changes made to it at RunTime. Like in your case you adding main_panel.add(panel_1);now after this you must perform

    main_panel.revalidate();
    main_panel.repaint();
    frame.getRootPane().revalidate(); // for Upto JDK 1.6.
    frame.revalidate();  // for JDK 1.7+
    frame.repaint();
    

    so that changes can be seen. A small code snippet to help you understand what I mean.

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class MultiplePanels extends JFrame
    {
        private JPanel registrationPanel, loginPanel, searchPanel;
    
        private JButton registerButton, loginButton, searchButton;  
    
        private ActionListener action;
    
        public MultiplePanels()
        {       
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);            
    
            registrationPanel = new JPanel();
            registrationPanel.setBackground(Color.WHITE);
    
            loginPanel = new JPanel();
            loginPanel.setBackground(Color.YELLOW);
    
            searchPanel = new JPanel();
            searchPanel.setBackground(Color.BLUE);
    
            JPanel buttonPanel = new JPanel();
            buttonPanel.setLayout(new GridLayout(0, 1));
            buttonPanel.setBackground(Color.DARK_GRAY);
    
            registerButton = new JButton("REGISTER");       
            loginButton = new JButton("LOGIN");     
            searchButton = new JButton("SEARCH");
    
            buttonPanel.add(registerButton);
            buttonPanel.add(loginButton);
            buttonPanel.add(searchButton);
    
            action = new ActionListener()
            {
                public void actionPerformed(ActionEvent ae)
                {
                    JButton button = (JButton) ae.getSource();
    
                    if (button == registerButton)
                    {
                        if (!(loginPanel.isShowing()) && !(searchPanel.isShowing()))
                        {
                            add(registrationPanel, BorderLayout.CENTER);
                        }
                        else 
                        {
                            if (loginPanel.isShowing())
                            {
                                remove(loginPanel);
                                add(registrationPanel, BorderLayout.CENTER);
                            }
                            else if (searchPanel.isShowing())
                            {
                                remove(searchPanel);
                                add(registrationPanel, BorderLayout.CENTER);
                            }
                        }
                    }
                    else if (button == loginButton)
                    {
                        if (!(registrationPanel.isShowing()) && !(searchPanel.isShowing()))
                        {
                            add(loginPanel, BorderLayout.CENTER);
                        }
                        else 
                        {
                            if (registrationPanel.isShowing())
                            {
                                remove(registrationPanel);
                                add(loginPanel, BorderLayout.CENTER);
                            }
                            else if (searchPanel.isShowing())
                            {
                                remove(searchPanel);
                                add(loginPanel, BorderLayout.CENTER);
                            }
                        }
                    }
                    else if (button == searchButton)
                    {
                        if (!(loginPanel.isShowing()) && !(registrationPanel.isShowing()))
                        {
                            add(searchPanel, BorderLayout.CENTER);
                        }
                        else 
                        {
                            if (loginPanel.isShowing())
                            {
                                remove(loginPanel);
                                add(searchPanel, BorderLayout.CENTER);
                            }
                            else if (registrationPanel.isShowing())
                            {
                                remove(registrationPanel);
                                add(searchPanel, BorderLayout.CENTER);
                            }
                        }
                    }
                    // This is what we are doing here to realize the changes
                    // made to the GUI.
                    revalidate();
                    repaint();
                }
            };
    
            registerButton.addActionListener(action);
            loginButton.addActionListener(action);
            searchButton.addActionListener(action);
    
            add(buttonPanel, BorderLayout.LINE_START);
            setSize(300, 300);
            setVisible(true);
        }
    
        public static void main(String... args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    new MultiplePanels();
                }
            });
        }
    }
    

提交回复
热议问题