使用JFrame制作登录注册界面
今天尝试使用Java swing制作登录注册界面,使用监听器实现简单功能。
整体规划:
- 制作主界面窗体
- 添加账号密码文本框以及登录注册按钮
- 为登录注册按钮添加
监听器
来实现对账号密码的分析- 新建User类用来存储用户信息
- 实现登录注册的基本逻辑(禁止重复,输出信息等)
知识储备:
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;// 执行了 方法就此结束
}
}
// 将数据打包为一个对象 存储list
User user = new User(namestr,pwdstr);
userList.add(user);
JOptionPane.showMessageDialog(null,
"恭喜注册为本平台的第"+userList.size()+"位用户");
}
到这里我们就基本完成啦,下面验收一下
注册用户
重复注册
登录
错误密码或账号
总结:
- 熟悉了
JFrame
- 对监听器有了清晰的认识并能够应用
- 对Java类与类之间的关联关系有了进一步理解
- 作为第一篇博文,学习了
markdown
的相关语法