Javax实现登录注册功能界面

2 篇文章 0 订阅
2 篇文章 0 订阅

Javax实现登录注册功能界面

实现目标:能够像正常的登录注册界面那样使用

实现基本窗体界面

这里有一些比较固定的界面设定,比如窗体的项目名称,窗体的大小,窗体的进程设置,窗体居屏幕的位置,组件是否可视化。

public class drawUI {
    public void initUI() {
        JFrame jFrame = new JFrame();
        jFrame.setTitle("画板");
        jFrame.setSize(900, 900);
        jFrame.setLocationRelativeTo(null);
  		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        jFrame.setVisible(true);//这个要加在所有添加组件后面,否则看不到所添加的组件
    }

实现输入框和相关按钮

需要注意的是:输入框的大小这里不能直接用 setSize() 之类的方法,而是用到另一个方法。

而设置按钮是一种比较常规的 JButton jb = new JButton(); 方法

还有要注意的是:除了窗体的设置大小的方法用的是setSize()方法以外,其余的组件设置大小都是用到setPreferredSize(new Dimesion())方法

/*这里是设置输入框的大小和布局的方法*/
//加载图片
ImageIcon image = new ImageIcon("D:/照片/1.jpg");
//标签 限制图片不能太大的 JLabel相当于一个容器
JLabel jla = new JLabel(image);
jla.setPreferredSize(new Dimension(500,100));
jFrame.add(jla);

JTextField jtf = new JTextField();//登录输入框
Dimension dm = new Dimension(300,500);
jtf.setPreferredSize(dm);
jFrame.add(jtf);

/*这里是设置按钮的方法,比较普遍*/
JButton jb = new JButton("登录");
jFrame.add(jb);
JButton jb1 = new JButton("注册");
jFrame.add(jb1);

在正常实现输入框和按钮之前,要想布局正常需要加一个流体布局

FlowLayout flowlayout = new FlowLayout();
jFrame.setLayout(flowlayout);

做到这一步的时候,此时在main方法中用类名调用方法可以实现一个窗体大致布局出来了。但是想要实现相应按钮的功能,需要给按钮添加监听器

给事件源创建监听器

在添加监听器之前我们首先要了解三个概念:

事件源:当前动作所发生的组件(注意当前两个字)
监听器:动作监听器方法(addActionListener()
绑定事件处理类

当前我们就可以确定事件源为按钮(登录或者注册),要给事件源添加监听器,给按钮添加监听器的方法为Jbutton.addActionListener()

点开addActionListener()查看源码(里面有对源码的解释)

public void addActionListener(ActionListener l) {
    /*这里需要添加ActionListener这个类 是引用类型,
    由于ActionListener是个接口,所以这个形参只能是实现了ActionListener接口的普通类对象*/
        listenerList.add(ActionListener.class, l);
    }

/*发现ActionListener是个接口,因为接口没有实例对象,需要创建个普通类去实现这个接口*/
public interface ActionListener extends EventListener {
    public void actionPerformed(ActionEvent e);
}

所以创建个普通类来实现改接口来实现接口里面的方法。(这里只是展示部分代码,后面有具体的实现业务的逻辑代码)

public class ButtonsListener implements ActionListener{
      /**
         * 这个是注册界面的框
         */
        public JTextField jtf;
        /**
         * 这个是登录界面的框
         */
        public JTextField jTextField;
    
        ArrayList<String> arrayList = new ArrayList<String>();
    @Override
    public void actionPerformed(ActionEvent e) {
        //业务逻辑代码
    }
}

但现在到了这步出现一个问题,你要登录或者注册账号,第一,如何将登录界面的输入框的内容传送给按钮的监听器进行响应;第二,如何来储存所注册的账号

要解决第一个问题,首先我们要知道第一这两个类是否有联系,第二如何将两个内容联系起来。首先这个要实现共享内容共享 需要用到引用传递 格式:对象1.属性1 = 对象2.属性2 或者 对象1.属性1 = 属性2

JTextField jtf = new JTextField();//登录输入框
ButtonsListener buttonslistener = new ButtonsListener();
buttonslistener.Jtextfield = jtf; // 要实现共享内容共享 需要用到引用传递 格式:对象1.属性1 = 对象2.属性2;对象1.属性1 = 属性2

接下来解决第二个问题,创建一个容器ArrayList<String>来储存注册的账号 。

再接着解决了事件相应问题和属性共享问题之后,就到了具体的业务逻辑代码的实现

登录注册功能的逻辑实现

这里需要注意的是两个问题:第一是注册页面中的jbu.addActionListener(this); 方法,这里不能用ButtonsListener buttonlistener = new ButtonsListener(); 然后jbu.addActionListener(buttonlistener); 的方法(详细解释在代码注释里面);第二是在注册功能的逻辑代码中需要注意的细节问题,详细解释在代码里面

  public class ButtonsListener implements ActionListener {
        /**
         * 这个是注册界面的框
         */
        public JTextField jtf;
        /**
         * 这个是登录界面的框
         */
        public JTextField jTextField;
        ArrayList<String> arrayList = new ArrayList<String>();
        @Override
        public void actionPerformed(ActionEvent e) {
			// 接受响应按钮的内容
            String s = e.getActionCommand();

            if ("登录".equals(s)) {
                String text = jTextField.getText();
                userLogin(text);
            }
            if ("注册".equals(s)) {
                registerUI();
            }
            if ("确定".equals(s)) {
                String text = jtf.getText();
                userRegister(text);
            }
        }
        /**
         * 注册页面 需要重新创建一个新的页面
         */
        public void registerUI() {
            JFrame jFrame1 = new JFrame();
            jFrame1.setSize(450, 550);
            jFrame1.setTitle("注册页面");
            jFrame1.setLocationRelativeTo(null);

            //流式布局管理器
            FlowLayout flow = new FlowLayout();
            //设置窗体为流式布局
            jFrame1.setLayout(flow);

            //用户提示
            JLabel user = new JLabel("账号:");
            jFrame1.add(user);

            //注册账号框(文本框)
            jtf = new JTextField();
            jtf.setPreferredSize(new Dimension(370,30));
            jFrame1.add(jtf);

            //按钮
            JButton jbu = new JButton("确定");
            jFrame1.add(jbu);
            jFrame1.setVisible(true);
             /**
             * this 是代表当前类的对象 这里只能用this关键字来作为形参 不能用在自己的类上new ButtonsListener()来代替this
             * 因为this代表的是原来的类的对象,如果你用了new ButtonsListener()的新创建对象的话原来的属性就用不到了
             */
            jbu.addActionListener(this);

        }
        /**
         * 登录功能
         */
        public void userLogin(String s) {
            /**
             * 登录是否成功地响应页面
             */
            JFrame jFrame = new JFrame();
            jFrame.setSize(300, 400);
            jFrame.setLocationRelativeTo(null);
            jFrame.setVisible(true);
            if (arrayList.size() != 0) {
                for (int i = 0; i < arrayList.size(); i++) {
                    if (arrayList.get(i).equals(s)) {
                        JLabel jLabel = new JLabel("登录成功");
                        jFrame.add(jLabel);
                        break;
                    } else {
                        JLabel jLabel = new JLabel("账号不正确,请重新登录");
                        jFrame.add(jLabel);
                    }
                }
            } else {
                System.out.println("账号不存在,请注册账号");
                JLabel jLabel = new JLabel("账号不存在,请注册账号");
                jFrame.add(jLabel);
            }
        }

        /**
         * 注册功能
         */
        public void userRegister(String s) {
            /**
             * 注册是否成功地响应页面
             */
            JFrame jFrame2 = new JFrame();
            jFrame2.setSize(300, 400);
            jFrame2.setLocationRelativeTo(null);
            jFrame2.setVisible(true);
            //list为0 注册账号
            if (arrayList.size() != 0) {
                for (int i = 0; i < arrayList.size(); i++) {
                    if (arrayList.get(i).equals(s)) {
                        JLabel jLabel = new JLabel("重复账号,请重新注册");
                        jFrame2.add(jLabel);
                    }
                    /**
                     * 有问题 没有检查数组的内容就转入 下面的那个语句不能用简单的else
                     * 因为用了简单的else的话,假如第一次没有找到注册的账号之后,就立马在else里表明注册成功
                     * 但其实ArrayList中是有这个注册账号的 
                     */
                    else if (i + 1 == arrayList.size()) {
                        //到了数组最后一个内容都没有对应的账号的时候
                        arrayList.add(s);
                        JLabel jLabel = new JLabel("注册成功");
                        jFrame2.add(jLabel);
                        break;
                    }
                }
            } else {
                arrayList.add(s);
                JLabel jLabel = new JLabel("注册成功");
                jFrame2.add(jLabel);
            }
        }
    }

效果示意图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值