使用 CardLayout Manager 切换页面

问题描述

这里我有 3 页。

Page1:询问用户是否要登录注册

第 2 页和第 3 页:注册页面登录页面

该程序以登录注册选项开始,但是当单击任一选项时,它不会切换页面,而是在原始页面旁边显示标签。我想让登录注册按钮在选择任何一个时消失,我目前得到的是下面。

编辑: 登录注册按钮被添加this. 而不是 panelOption,问题已解决

enter image description here

enter image description here

enter image description here

主类

package com.app.bank;
 
public class OnlineBankingApp {
    public static void main(String args[]) {
        new BankFrame();
 
 
    }
}

帧类

public class BankFrame extends JFrame {
    public static final int SCREEN_WIDTH = 1_000;
    public static final int SCREEN_HEIGHT = 1_000;
 
    BankFrame(){
        this.add(new BankPanel());
        ImageIcon logo = new ImageIcon("Banklogo.png");
        this.setTitle("G-Bank inc.");
        this.setResizable(true);
        this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        this.getContentPane().setBackground(new Color(0x123456));
        this.setLayout(new GridBagLayout());
        this.setSize(SCREEN_WIDTH,SCREEN_HEIGHT);
        this.setIconImage(logo.getimage());
        this.setLocationRelativeto(null);
        //this.pack();
        this.setVisible(true);
    }
}

面板类

package com.app.bank;
 
import javax.swing.*;
import java.awt.*;
 
public class BankPanel extends JPanel{
    //Initialize Buttons
    JButton loginButton;
    JButton signUpButton;
 
    //Initialize panels
    JPanel cards;
    JPanel panelOption;
    JPanel panelLogin;
    JPanel panelSignup;
 
    //Initialize Text Fields
    JLabel usernameSignup;
    JLabel passwordSignup;
    JLabel usernameLogin;
    JLabel passwordLogin;
 
    //Initialize cardlayout
    cardlayout cardlayout;
 
    //Page Text
    final static String OPTION_PANEL = "Card with Options";
    final static String LOGIN_PANEL = "Card with Login";
    final static String SIGN_UP_PANEL = "Card with Sign Up";
 
    BankPanel() {
 
        //Initialize Cards
        cards = new JPanel();
        cards.setLayout(cardlayout = new cardlayout());
 
        //Page 1
        panelOption = new JPanel();
        panelOption.setSize(BankFrame.SCREEN_WIDTH,BankFrame.SCREEN_HEIGHT);
 
        //Add Page1 Components
        loginButton = new JButton("Login");
        this.add(loginButton,new GridBagConstraints());
 
        signUpButton = new JButton("Sign Up");
        this.add(signUpButton,new GridBagConstraints());
 
        //Page 2
        panelSignup = new JPanel();
        panelSignup.setSize(BankFrame.SCREEN_WIDTH,BankFrame.SCREEN_HEIGHT);
 
        //Add page 2 components
        usernameSignup = new JLabel("Enter New Username:");
        passwordSignup = new JLabel("Enter New Password:");
        panelSignup.add(usernameSignup);
        panelSignup.add(passwordSignup);
 
        //Page 3
        panelLogin = new JPanel();
        panelLogin.setSize(BankFrame.SCREEN_WIDTH,BankFrame.SCREEN_HEIGHT);
 
        //Add page 3 components
        usernameLogin = new JLabel("Username:");
        passwordLogin = new JLabel("Password:");
        panelLogin.add(usernameLogin);
        panelLogin.add(passwordLogin);
 
        //add pages to cards
        cards.add(panelOption,OPTION_PANEL);
 
        cards.add(panelLogin,LOGIN_PANEL);
 
        cards.add(panelSignup,SIGN_UP_PANEL);
        cardlayout.show(cards,OPTION_PANEL);
 
        //Switch to page 2
        signUpButton.addActionListener(e -> cardlayout.show(cards,SIGN_UP_PANEL));
 
        //Switch to Page 3
        loginButton.addActionListener(e -> cardlayout.show(cards,LOGIN_PANEL));
 
 
        this.add(cards); //Do I Need to add this while my BankFrame class has this.add(new BankPanel)?
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)