2个JPanel放入一个JFrame,注册界面能正常显示,点击“返回” 后登录界面无法显示,求解啊
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Pattern;import javax.swing.*;public class LoginFrame extends JFrame{
public static JPanel jplog=new JPanel();
public static JPanel jpreg=new JPanel();
//文本框:用户名 密码 邮箱
private JTextField txflogname=new JTextField();
private JTextField txfregname=new JTextField();
private JTextField txfregemail=new JTextField();
private JPasswordField txflogpassword=new JPasswordField();
private JPasswordField txfregpassword=new JPasswordField();
private JPasswordField txfrepassword=new JPasswordField();
//按钮:登录 注册 重置  注册跳转 返回跳转
JButton btnlog,btnreg,btnreset,btnregister,btngoback;

public LoginFrame(){
// 初始化登录和注册组件
setRegisterPanel();
setLoginPanel();
         //返回跳转按钮
btngoback.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
jplog.setVisible(true);
jpreg.setVisible(false);
}
});
//重置按钮
btnreset.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
txfregname.setText(null);
txfregpassword.setText(null);
txfrepassword.setText(null);
txfregemail.setText(null);
}
});
}

/*
 * 登录、注册窗口
 */
public void setLoginFrame(){
setTitle("北大青鸟音乐共享平台");
// setLayout(null);
ImageIcon img=new ImageIcon("bg.jpg");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel background=new JLabel(img);
background.setBounds(0, 0, img.getIconWidth(), img.getIconWidth()/2);
//设置窗口大小
Toolkit tk = this.getToolkit();
Dimension dim = tk.getScreenSize();
setBounds((dim.width-img.getIconWidth())/2, (dim.height-img.getIconHeight())/2, img.getIconWidth(), img.getIconHeight());

getContentPane().add(background,-1);
getContentPane().add(jplog,0); //添加注册JPanel
getContentPane().add(jpreg,0); //添加登录JPanel
jplog.setVisible(false);           //显示登录界面
jpreg.setVisible(true); //隐藏注册界面

setResizable(false); //窗口大小不可改变
setVisible(true); //设置窗口为可见
}
/*
 * 登录JPanel设置
 */
public void setLoginPanel(){
jplog.setLayout(null);
JLabel userlogname=new JLabel("用户名:");
JLabel userlogpassword=new JLabel("密     码:");
btnlog=new JButton("登录");
btnregister=new JButton("注册");

//设置组件位置
userlogname.setBounds(600, 150, 55, 20);
txflogname.setBounds(655, 150, 100, 20);
userlogpassword.setBounds(600, 185, 55, 20);
txflogpassword.setBounds(655, 185, 100, 20);
btnlog.setBounds(615, 220, 60, 20);
btnregister.setBounds(685, 220, 60, 20);
//将组件添加入登录JPanel
jplog.add(userlogname);
jplog.add(txflogname);
jplog.add(userlogpassword);
jplog.add(txflogpassword);
jplog.add(btnlog);
jplog.add(btnregister);
jplog.setOpaque(false);
//jplog.setVisible(false);
}

/*
 * 注册JPanel设置
 */
public void setRegisterPanel(){
jpreg.setLayout(null); 
JLabel userregname=new JLabel("用  户  名:");
JLabel userregpassword=new JLabel("密         码:");
JLabel userregpassword2=new JLabel("二次密码:");
JLabel userregemail=new JLabel("邮         箱:");
btnreg=new JButton("注册");
btnreset=new JButton("重置");
btngoback=new JButton("返回");
//组件位置设置
userregname.setBounds(600, 115, 70, 20);
txfregname.setBounds(670, 115, 150, 20);
userregpassword.setBounds(600, 150, 70, 20);
txfregpassword.setBounds(670, 150, 150, 20);
userregpassword2.setBounds(600, 185, 70, 20);
txfrepassword.setBounds(670, 185, 150, 20);
userregemail.setBounds(600, 220, 70, 20);
txfregemail.setBounds(670, 220, 150, 20);
btnreg.setBounds(610, 255, 60, 20);
btnreset.setBounds(680, 255, 60, 20);
btngoback.setBounds(750, 255, 60, 20);
//把组件添加到注册JPanel
jpreg.add(userregname);
jpreg.add(txfregname);
jpreg.add(userregpassword);
jpreg.add(userregpassword2);
jpreg.add(txfregpassword);
jpreg.add(txfrepassword);
jpreg.add(userregemail);
jpreg.add(txfregemail);
jpreg.add(btnreg);
jpreg.add(btnreset);
jpreg.add(btngoback);
jpreg.setOpaque(false);
//jpreg.setVisible(false);
}
public static void main(String [] args){
LoginFrame lf=new LoginFrame();
lf.setLoginFrame();
}}

解决方案 »

  1.   

    在按钮事件  调用add和remove方法?
      

  2.   

    // 返回跳转按钮
    btngoback.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    jplog.setVisible(true);
    jpreg.setVisible(false);
    }
    });上述code中,当点击返回按钮时,调用了方法“jpreg.setVisible(false);”,意思是将注册界面隐藏,如果不想隐藏界面,那换成你需要的操作即可
      

  3.   


    我的目的是隐藏  现在的问题是jplog的显示问题 ,没显示啊 
      

  4.   

    刚才有点误解你的意思了,现修正code如下:
    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.Dimension;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;public class LoginFrame extends JFrame {
    public static JPanel jplog = new JPanel();
    public static JPanel jpreg = new JPanel();
    // 文本框:用户名 密码 邮箱
    private JTextField txflogname = new JTextField();
    private JTextField txfregname = new JTextField();
    private JTextField txfregemail = new JTextField();
    private JPasswordField txflogpassword = new JPasswordField();
    private JPasswordField txfregpassword = new JPasswordField();
    private JPasswordField txfrepassword = new JPasswordField();
    // 按钮:登录 注册 重置 注册跳转 返回跳转
    JButton btnlog, btnreg, btnreset, btnregister, btngoback; public LoginFrame() {
    // 初始化登录和注册组件
    setRegisterPanel();
    setLoginPanel();
    // 返回跳转按钮
    btngoback.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    jplog.setVisible(true);
    jpreg.setVisible(false);
    }
    });
    // 重置按钮
    btnreset.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    txfregname.setText(null);
    txfregpassword.setText(null);
    txfrepassword.setText(null);
    txfregemail.setText(null);
    }
    });
    btnregister.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    jplog.setVisible(false);
    jpreg.setVisible(true);
    }
    });
    } /*
     * 登录、注册窗口
     */
    public void setLoginFrame() {
    setTitle("北大青鸟音乐共享平台");
    // setLayout(null);
    ImageIcon img = new ImageIcon("bg.jpg");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JLabel background = new JLabel(img);
    background.setBounds(0, 0, img.getIconWidth(), img.getIconWidth() / 2);
    // 设置窗口大小
    Toolkit tk = this.getToolkit();
    Dimension dim = tk.getScreenSize();
    setBounds((dim.width - img.getIconWidth()) / 2,
    (dim.height - img.getIconHeight()) / 2, img.getIconWidth(),
    img.getIconHeight());
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(background, BorderLayout.NORTH);
    JPanel p = new JPanel();
    p.setLayout(new CardLayout());
    p.add(jplog, "login");
    p.add(jpreg, "regist");
    getContentPane().add(p, BorderLayout.CENTER); // 添加注册JPanel
    jplog.setVisible(false); // 显示登录界面
    jpreg.setVisible(true); // 隐藏注册界面
    setVisible(true); // 设置窗口为可见
    pack();
    // setResizable(false); // 窗口大小不可改变
    } /*
     * 登录JPanel设置
     */
    public void setLoginPanel() {
    jplog.setLayout(null);
    JLabel userlogname = new JLabel("用户名:");
    JLabel userlogpassword = new JLabel("密     码:");
    btnlog = new JButton("登录");
    btnregister = new JButton("注册"); // 设置组件位置
    userlogname.setBounds(600, 150, 55, 20);
    txflogname.setBounds(655, 150, 100, 20);
    userlogpassword.setBounds(600, 185, 55, 20);
    txflogpassword.setBounds(655, 185, 100, 20);
    btnlog.setBounds(615, 220, 60, 20);
    btnregister.setBounds(685, 220, 60, 20);
    // 将组件添加入登录JPanel
    jplog.add(userlogname);
    jplog.add(txflogname);
    jplog.add(userlogpassword);
    jplog.add(txflogpassword);
    jplog.add(btnlog);
    jplog.add(btnregister);
    jplog.setOpaque(false);
    // jplog.setVisible(false);
    } /*
     * 注册JPanel设置
     */
    public void setRegisterPanel() {
    jpreg.setLayout(null);
    JLabel userregname = new JLabel("用  户  名:");
    JLabel userregpassword = new JLabel("密         码:");
    JLabel userregpassword2 = new JLabel("二次密码:");
    JLabel userregemail = new JLabel("邮         箱:");
    btnreg = new JButton("注册");
    btnreset = new JButton("重置");
    btngoback = new JButton("返回");
    // 组件位置设置
    userregname.setBounds(600, 115, 70, 20);
    txfregname.setBounds(670, 115, 150, 20);
    userregpassword.setBounds(600, 150, 70, 20);
    txfregpassword.setBounds(670, 150, 150, 20);
    userregpassword2.setBounds(600, 185, 70, 20);
    txfrepassword.setBounds(670, 185, 150, 20);
    userregemail.setBounds(600, 220, 70, 20);
    txfregemail.setBounds(670, 220, 150, 20);
    btnreg.setBounds(610, 255, 60, 20);
    btnreset.setBounds(680, 255, 60, 20);
    btngoback.setBounds(750, 255, 60, 20);
    // 把组件添加到注册JPanel
    jpreg.add(userregname);
    jpreg.add(txfregname);
    jpreg.add(userregpassword);
    jpreg.add(userregpassword2);
    jpreg.add(txfregpassword);
    jpreg.add(txfrepassword);
    jpreg.add(userregemail);
    jpreg.add(txfregemail);
    jpreg.add(btnreg);
    jpreg.add(btnreset);
    jpreg.add(btngoback);
    jpreg.setOpaque(false);
    // jpreg.setVisible(false);
    } public static void main(String[] args) {
    LoginFrame lf = new LoginFrame();
    lf.setLoginFrame();
    }}
      

  5.   

    我调试的是ok的,只是你的布局比较奇怪,你是不是没有把界面拉开啊!?我一开始也以为什么都没有的,后来把界面拉很大以后出现了,你的若干setBounds方法设置的位置比较偏