如何用另一个JPanel替换当前的JPanel?

时间:2014-04-17 09:30:00

标签: java swing jframe jpanel layout-manager

当我按 Admin 按钮时,我正试图在同一UserAdminPanel内从AdminLogin转换为JPanel

UserAdmin小组

enter image description here

转入AdminLogin小组

enter image description here

我现在遇到的问题是我打开一个新面板,而不是将当前面板更改为新面板。

这是我UserAdminPanel

的代码
public class SelectAdminUserPanel extends JPanel 
{
    public SelectAdminUserPanel()
    {
        setLayout(new GridLayout(3,1));
        JButton b1 = new JButton("User Login");
        JButton b2 = new JButton("Admin Login");
        JButton b3 = new JButton("Exit");

        b1.addActionListener(new  SelectUserButtonListener() );
        b2.addActionListener(new SelectAdminButtonListener());
        b3.addActionListener(new SelectExitButtonListener() );

        add(b1);
        add(b2);
        add(b3);
    }

    private class SelectAdminButtonListener implements ActionListener
    {

        public void actionPerformed(ActionEvent event)
        {
            AdminModule am = new AdminModule();

              am.run();   
        }
    }

    private class SelectUserButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
              GameModule gm = new GameModule();
              gm.run(); 
        }
    }

    private class SelectExitButtonListener implements ActionListener
    {
        public void actionPerformed (ActionEvent event)
        {

        }
    }
}

这是AdminLogin面板

的代码
public class AdminLoginPanel extends JPanel
{
    AdminLoginPanel()
    {         
        JLabel pwlabel = new JLabel("Password");
        JPasswordField pwfield = new JPasswordField(20);
        JButton loginbutton = new JButton("Login");

        add(pwlabel);
        add(pwfield);
        add(loginbutton);
     }
}

我查看了以下example和此example,但它不太适用,因为它涉及CardLayout而不是重写当前JPanel

1 个答案:

答案 0 :(得分:1)

我认为您应该引用主框架,只需根据按下的按钮从中移除组件,并仅添加所需的组件。根据您的说法,UserAdminPanel是您的主要面板。我认为它已添加到您可以获取参考的框架中。单击按钮时,您希望删除其上显示的所有内容,并仅显示单击的按钮应显示的内容。我认为它应该是这样的:

private class SelectAdminButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent event) {
             frame.getContentPane().removeAll();
             AdminModule am = new AdminModule();
             frame.add(am.getNewPanel());
             frame.pack();                    
             // am.run();   //it's not clear what does for you
        }

}

方法getNewPanel()将返回基础JPanel。我假设AdminModule引用了AdminLoginPanel