使用JFrame制作登录注册界面

  今天尝试使用Java swing制作登录注册界面,使用监听器实现简单功能。

整体规划:

  1. 制作主界面窗体
  2. 添加账号密码文本框以及登录注册按钮
  3. 为登录注册按钮添加监听器来实现对账号密码的分析
  4. 新建User类用来存储用户信息
  5. 实现登录注册的基本逻辑(禁止重复,输出信息等)

知识储备:

1. 窗体:

  • Java Swing 的JFrame类就是窗体类,实现创建界面
  • 我们只需要使用JFrame的各种内置方法即可设置大小参数,关闭方法,添加文本框JTextField,按钮JButton组件等

2. 什么是监听器

  • 事件监听由三部分组成:事件源,事件,监听器
  • 监听器就是为了查看事件源是否发生了某一事件,在我们的界面中可以理解为监听按钮是否被点击
  • 监听器都是接口,需要我们创建类自己实现,这样我们就可以自己编写如何处理事件的变化

实现过程

1.添加主界面窗体

JFrame jf = new JFrame();//创建窗体
jf.setTitle("用户界面");//设置标题
jf.setSize(500,600);//窗体长宽像素大小
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//默认关闭后退出进程
//设置布局
jf.setLayout(new FlowLayout());//流式布局t());

2.添加文本框以及按钮组件:

//创建组件对象
JButton btn1 = new JButton("登录");
JButton btn2 = new JButton("注册");JLabel nameJla = new JLabel("账号:");//左侧说明文字
JLabel pwdJla = new JLabel("密码:");JTextField nameIn = new JTextField();//文本框
JPasswordField pwdIn = new JPasswordField();//JPasswordField是专为密码设立的文本框,可以使键入文字用小圆点显示//窗体添加组件
jf.add(nameJla);
jf.add(nameIn);
jf.add(pwdJla);
jf.add(pwdIn);
jf.add(btn1);
jf.add(btn2);jf.setVisible(true);//加了这行代码我们才可以看见窗体

  我们来看一下现在的窗口样子:

  这文本框太小了,不行,我们要设置一下文本框的大小,那么也使用JFrame的setSize()方法可以吗,我们尝试一下:

  还是这个样子,所以这种方法不行

  这里我们要用到setPreferredSize()方法,来设置文本框的绝对尺寸,当打出这个函数的时候,我们会发现它需要一个Dimension类型的参数,这个类是用来设置大小的,我们直接创建即可。

//设置组件对象的属性/内容
Dimension dim = new Dimension(410,35);
nameIn.setPreferredSize(dim);//绝对尺寸
pwdIn.setPreferredSize(dim);

  注意这段代码要加到 jf.setVisible(true) 前面,因为这句代码会显示它之前的设置好的界面,如果改大小的代码在它后面是没有任何效果的

  我们再看一下效果:

  嗯,基本界面已经完毕了,下面我们进入到监听器部分

3.监听器

  我们现在要给两个按钮添加监听器,以判断是登陆还是注册。
  这里我们使用的是ActionListener监听器,从名称中我们也可以看出,这是动作监听器,这里就是监听我们点击按钮的动作。
  刚才说过,监听器都是接口,需要我们自己实现,这里我们要在定义一个类进行继承。

  这个监听器只有一个方法需要实现:

public interface ActionListener extends EventListener {/*** Invoked when an action occurs.*/public void actionPerformed(ActionEvent e);}

  实现此方法,这里事件自带方法getActionCommand()获取按钮上的文字,并调用文本框的自带方法getText()获取文本框里面的文字。

  由于我们要使用UI类中的文本框对象,这里我们定义两个文本框便于后续导入,但绝不是new新对象。

public class UserUIListener implements ActionListener {//定义两个输入框对象变量名: 如果重新创建一个对象 / 当时这个输入框对象不是界面上的对象
//    JTextField nameIn = new JTextField();JTextField nameIn = null;//或者不写后面// 属性: 当这个类创建了对象之后,对象中就会生成一份属性,对象就可以调用自己的这份属性JPasswordField pwdIn = null;// 点击被监听的按钮 就调用 这个方法// ActionEvent e : e 用来获取点击按钮上的字符串public void actionPerformed(ActionEvent e){String actonstr = e.getActionCommand();System.out.println(actonstr+"被点击了");String namestr = nameIn.getText();String pwdstr = pwdIn.getText();System.out.println("namestr:"+namestr);System.out.println("pwdstr:"+pwdstr);

  在UI类中为我们的监听器传文本框对象

//监听加载UserUIListener uiListen = new UserUIListener();//当下面两个按钮被点击时 , 要使用uilisten 调用响应的方法btn1.addActionListener(uiListen);btn2.addActionListener(uiListen);// 将加载到界面上的输入框对象 的引用地址 复制一份传给 uilisten 中的变量名// 这样的话,uilisten 在底层调用响应方法的时候, 就可以使用这个地址获取文本uiListen.nameIn = nameIn;// 传值 赋值 右传左uiListen.pwdIn = pwdIn;

  这下我们就可以测试了,先输入账号为123,密码为456
  得到了预期结果,我们就可以继续了

  显然我们需要存储我们的用户信息,先定义一个User类

public class User {String name;String pwd;// 构造方法// 以类名为方法名// 创建对象的时候执行public User(String name, String pwd) {this.name = name;this.pwd = pwd;}
}

  为了存储User对象,我们使用ArrayList<User>来存储,它有常用的四个特性方法:

  • get
  • add
  • remove
  • size():查看已经存储了几个
ArrayList<User> userList = new ArrayList();

  我们来分析一下登录注册的逻辑:用两个思维导图

  我们先检测点击了哪个按钮,然后每个按钮执行不同功能,这里JOptionPane.showMessageDialog();函数作用是输出提示信息,就是提示、警告、错误的窗口,注册查重和登录都是遍历ArrayList,一旦不符合要求,立刻return终止函数并输出相应错误语句。

if(actonstr.equals("登录")){// 遍历所有已经存在的用户对象,比较用户名是否有跟输入框输入的一致// 看看是否已经注册了for(int i =0; i < userList.size(); i++){// 遍历取出用户对象User getuser = userList.get(i);if(getuser.name.equals(namestr)){//比较密码if(getuser.pwd.equals(namestr)){// 比较密码if(getuser.pwd.equals(pwdstr)){JOptionPane.showMessageDialog(null,"登陆成功!!");return;}}}}JOptionPane.showMessageDialog(null,"未查询到此用户,请先注册或者修改输入账号名");
}else if(actonstr.equals("注册")){// 遍历所有已经存在的用户对象,比较用户名是否有跟输入框输入的一致for(int i =0; i < userList.size(); i++){// 遍历取出用户对象User getuser = userList.get(i);if(getuser.name.equals(namestr)){// 提示弹窗JOptionPane.showMessageDialog(null,"该用户已经存在!!");// 提示之后 直接结束方法return;// 执行了 方法就此结束}}// 将数据打包为一个对象 存储listUser user = new User(namestr,pwdstr);userList.add(user);JOptionPane.showMessageDialog(null,"恭喜注册为本平台的第"+userList.size()+"位用户");
}

  到这里我们就基本完成啦,下面验收一下

  注册用户

  重复注册

  登录

  错误密码或账号

总结:

  1. 熟悉了JFrame

  2. 对监听器有了清晰的认识并能够应用

  3. 对Java类与类之间的关联关系有了进一步理解

  4. 作为第一篇博文,学习了markdown的相关语法

JFrame登录注册相关推荐

  1. java简单小程序_Java简易登录注册小程序

    这篇文章主要介绍了Java图形界面开发,简易登录注册小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的 ...

  2. Java图形界面开发—简易登录注册小程序

    登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. Java程序操作数据库SQLserver详解 功能介绍:简单的登录注册系统,使用了数据库 ...

  3. Java Swing 简单的登录注册窗口

    前言 最近在学习Java Swing 写了一个简单的登录注册窗口, 该项目包含了对JFrame的创建,和一些组件的练习并且加入了简单的事件监听和简单的用户名密码判断. 登录和注册的页面只画出来了没有进 ...

  4. android servlet 登陆,Android Studio+Servlet+MySql实现登录注册

    一.Android 项目当中设置明文传输 1.设置明文传输的xml 2.引入上述创建的xml android:networkSecurityConfig="@xml/network_secu ...

  5. 【ios开发/Xcode】实现登录注册

    [ios开发/Xcode]实现登录注册 实现效果 源代码 实现效果 首先进入初始界面,输入账号Linchuantao,密码Linchuantao,显示登录失败(如下左图),因此需要进行注册,点击左下角 ...

  6. java实现用户登录注册功能(用集合框架来实现)

    需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTe ...

  7. vue-cli——vue-resource登录注册实例

    前言 使用vue-resource请求接口非常方便,在使用前需安装vue-resource依赖并在入口文件main.js中声明. 附github地址 实例功能简述 本实例只有简单的两个模块:登录和注册 ...

  8. java实现登录注册案例_Java基于IO版实现用户登录注册的案例

    下面小编就为大家带来一篇基于IO版的用户登录注册实例(Java).小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 今天学的是用户登录注册功能. 4个包: itcast.c ...

  9. 注册登录案例用MVC和mysql_用MVC模式实现简单用户登录注册功能

    Model2模式 Jsp+Servlet+JavaBean MVC:开发模式 M:Model 模型层 ----> JavaBean V:View 视图层 ----> Jsp C:Contr ...

最新文章

  1. RabbitMQ(二):RabbitMQ高级特性
  2. 智源重大研究方向“智能信息检索与挖掘”发布会(活动报名)
  3. HASH算法不是加密算法
  4. Swift之父退出核心团队,自曝原因:环境有毒!
  5. 数据挖掘十大经典算法之——Naive Bayes 算法
  6. 通过FILETIME得到时间
  7. NodeJS-queryString
  8. Leetcode: Median of Two Sorted Arrays
  9. hadoop MultipleInputs fails with ClassCastException (get fileName)
  10. OJ1076: 三位数求解(C语言)
  11. python读取多个文件夹_如何从python中的文件夹中读取多个NetCDF文件
  12. python从网络时间服务器获取并打印当前时间以及pip安装ntplib的一次体验
  13. 看完你自己也能创建个小Linux
  14. android 点滴积累
  15. python语言的主网址-Python爬取网址中多个页面的信息
  16. 私有属性的另类访问方式
  17. pycharm 运行提示:@Error running ‘xx‘: Cannot run program “C:\Python27\python.exe“ (in directory “D:\...)
  18. java写txt文件_Java读写txt文件
  19. vnc远程控制软件配置,如何对vnc远程控制软件配置
  20. 用Java实现信号量机制

热门文章

  1. 多目工业相机同步采集
  2. HMM模型——隐含马尔科夫模型【详细分析+图】
  3. vi/vim命令键盘示意图
  4. 教你如何把女朋友训练得服服帖帖
  5. OCR - 关于OCR技术体系的发展的了解
  6. 格力YB0F2红外遥控编码分析
  7. 艺术聚焦:化学姐姐的涂鸦No.56
  8. 学校的地下网站(学校的地下网站1080P高清)
  9. 数据库-Mysql使用学习笔记(命令行及图形化界面)
  10. 我的世界神级种子Java_我的世界:想寻找神级种子,输入“苦力怕”会如何?...