设置了简单的界面,希望点击菜单相应的登录、注册页面的时候切换面板。登录和注册时两个独立的面板,组件也是单独加上去。监视器监视到触发按钮之后,隐藏原来的面板,然后加上新的对应的面板。每次切换就会出现新窗口,怎么样才可以让他们在一个窗口内实现?
// 改代码为监视器代码
public void actionPerformed(ActionEvent e) {
if(e.getSource() == view.inbutton){
view = new MenuCD();
view.setLogin();
System.out.println("进入系统");
}
else if(e.getSource() == view.mlogin){ // mlogin为登录按钮
view = new MenuCD();
view.setLogin();
System.out.println("进入登陆页面");
}
else if(e.getSource() == view.mregister){ // mregister为注册按钮
view = new MenuCD();
view.setRegister();
System.out.println("进入注册页面");
}
以下两个函数setLogin, setRegister就是创建相应的组件,将原来底层容器上的面板隐藏,然后将面板加到底层容器上
public void setLogin(){ // 登录面板
jpanel.setVisible(false);
regpanel.setVisible(false);
//菜单
menu = new JMenuBar();
mlogin = new JMenuItem(" 登录 ");
mregister = new JMenuItem(" 注册 ");
// 创建监视器对象
listener = new MenuListener();
listener.setView(this);
bulistener = new MyListener();
bulistener.setView(this);
mlogin.addActionListener(listener);
mregister.addActionListener(listener);
// 菜单
menu.add(mlogin);
mlogin.setFont(new Font("幼圆",Font.BOLD,20));
menu.add(mregister);
mregister.setFont(new Font("幼圆",Font.BOLD,20));
menu.setBounds(200,5,180,50);
// 登录组件
logbutton.setFont(myfont);
label1.setFont(myfont);
label1.setBounds(80,100,80,50);
label2.setFont(myfont);
label2.setBounds(67,157,120,50);
logAccount.setBounds(160,110,300,30);
logPass.setBounds(160,170,300,30);
logbutton.setBounds(245,245,100,30);
logbutton.addActionListener(bulistener); // 给登录按钮注册监视器
mlogin.setForeground(Color.LIGHT_GRAY);
// 在登录面板添加组件
logpanel.add(menu);
logpanel.add(label1);
logpanel.add(logAccount);
logpanel.add(label2);
logpanel.add(logPass);
logpanel.add(logbutton);
// 将该面板加到底层容器上
con.add(logpanel);
}
public void setRegister(){ // 注册面板
logpanel.setVisible(false);
jpanel.setVisible(false);
Container con = ft.getContentPane();
//菜单
menu = new JMenuBar();
mlogin = new JMenuItem(" 登录 ");
mregister = new JMenuItem(" 注册 ");
// 创建监视器对象
listener = new MenuListener();
listener.setView(this);
bulistener = new MyListener();
bulistener.setView(this);
mlogin.addActionListener(listener);
mregister.addActionListener(listener);
// 菜单
menu.add(mlogin);
mlogin.setFont(new Font("幼圆",Font.BOLD,20));
menu.add(mregister);
mregister.setFont(new Font("幼圆",Font.BOLD,20));
// ft.setJMenuBar(menu);
menu.setBounds(200,0,180,50);
// 设置组件位置
label1.setBounds(80,75,80,50);
label1.setFont(myfont);
label2.setBounds(67,133,120,50);
label2.setFont(myfont);
labeln.setBounds(105,197,120,50);
labeln.setFont(myfont);
labeli.setBounds(115,255,120,50);
labeli.setFont(myfont);
reAccount.setBounds(160,85,300,30);
rePass.setBounds(160,145,300,30);
renname.setBounds(160,205,300,30);
reID.setBounds(160,265,300,30);
regbutton.setBounds(245,310,100,30);
mregister.setForeground(Color.LIGHT_GRAY);
regbutton.addActionListener(bulistener); // 给注册按钮注册监视器
// 在注册面板添加组件
regpanel.add(menu);
regpanel.add(label1);
regpanel.add(reAccount);
regpanel.add(label2);
regpanel.add(rePass);
regpanel.add(labeln);
regpanel.add(renname);
regpanel.add(labeli);
regpanel.add(reID);
regpanel.add(regbutton);
// 将该面板加到底层容器上
con.add(regpanel);
}