JAVA登录界面的实现(二)
前一篇文章中我们已经实现了一个基本的登录界面。今天我们继续完善一下这个登录界面,给这个界面添加一个登录验证的功能。
首先根据这个功能我们先来整理一下设计思路
验证账号密码
1.对登录按钮设置一个事件监听机制,监听按钮是否被点击。
2.等登录按钮被点击后,我们要获取账号和密码文本输入框中的信息,然后用if语句进行判断
3.如果正确,则利用JFrame类再去新建一个窗口,并且利用属性来关闭原来的窗口。不正确则不进行操作。
这里涉及到了事件监听机制,我们先来了解一下什么是事件监听机制。它主要用来监视窗体、组件是否有发生变化,并且捕获这些变化的相应信息。
事件源对象:所有的容器组件和元素组件都可以成为事件源对象。但是在具体的项目中并不是所有的组件都是事件源对象,只有你动作发生在某个组件上,该组件才是事件源对象。比如你需要对“登录”按钮进行点击操作,那么“登录”按钮就是一个事件源对象。
事件监听方法:捕获事件源对象上的动作。例如,addActionListener(ActionListener l),这就是一个动作监听方法。事件监听方法是由事件源对象提供的。它的主要作用就是捕获类似按钮组件上点击动作和捕获类似输入框对象上的键盘回车动作,然后收集信息和动作,将信息交给ActionListener类型的参数进行处理。在我们这个登录界面中,它需要传递的信息就是账号输入框和密码输入框这两个对象信息,以及“按钮点击”这个动作。
事件接口:发生动作后要执行的处理代码操作。比如,ActionListener 动作事件接口,它提供一个事件处理方法,方法中有、actionEvent参数,参数中储存之前获取的信息和动作。我们需要定义一些方法对这些信息进行处理,在这里就是要对账号和密码输入框中的文本进行比较操作,并且判断是否允许登录,开辟一个新界面。
我们用一个图来做个小小的总结。
事件监听机制在刚接触的时候会有点搞不清,感觉绕来绕去的。也不用太担心,多写写代码后面慢慢就理解了。接下来我们来分析一下代码。
//Login类
import java.awt.FlowLayout;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
//首先实现登录界面
public class Login {
//主函数入口
public static void main(String args[]) {
Login l=new Login();
l.showUI();
}
public void showUI() {
javax.swing.JFrame jf=new javax.swing.JFrame();
jf.setTitle("登录界面");
jf.setSize(340,500);//只对*容器有效
jf.setDefaultCloseOperation(3);//窗体关闭时结束程序
jf.setLocationRelativeTo(null);//居中
jf.setResizable(false);
//选择布局类型,定义流式布局的对象,并且设置每个组件之间相隔5cm
java.awt.FlowLayout fl=new java.awt.FlowLayout(FlowLayout.CENTER,5,5);
jf.setLayout(fl);//设置*容器的布局为流式布局
//设置格式大小
java.awt.Dimension dim1=new java.awt.Dimension(340,300);//图片大小
java.awt.Dimension dim2=new java.awt.Dimension(50, 50);//标签的大小
java.awt.Dimension dim3=new java.awt.Dimension(250, 30);//输入框的大小
java.awt.Dimension dim4=new java.awt.Dimension(100, 40);//按钮的大小
//添加组件
//添加图片,先要把图片加载到内存中。利用IamgeIcon类把图片加载到内存
javax.swing.ImageIcon icon=new javax.swing.ImageIcon("C:\\Desktop\\蓝杰学习\\材料\\爱晚亭.gif");
JLabel labpic=new JLabel(icon);//不可以直接把图片加到*容器中,需要先将其设置为标签
labpic.setPreferredSize(dim1);
jf.add(labpic);//再将标签加到*容器中
//添加“账号”标签
JLabel labname=new JLabel();
labname.setText("账号:");
labname.setPreferredSize(dim2);
jf.add(labname);
//添加账号输入框,并添加监控事件
JTextField textname=new JTextField();
textname.setPreferredSize(dim3);
jf.add(textname);
//添加“密码”标签
JLabel labpassword=new JLabel();
labpassword.setText("密码:");
labpassword.setPreferredSize(dim2);
jf.add(labpassword);
//添加密码输入框,并添加监控事件
JPasswordField jp=new JPasswordField();
jp.setPreferredSize(dim3);
jf.add(jp);
//添加一个button按钮
javax.swing.JButton button=new javax.swing.JButton();
button.setText("登录");
button.setPreferredSize(dim4);
jf.add(button);
jf.setVisible(true);
//首先实例化登录按钮监听类的对象,并把登录界面中账号和密码输入框的对象传给它
LoginListener ll=new LoginListener(jf,textname,jp);
//对当前窗体添加监听方法
button.addActionListener(ll);//监控按钮
}
}
//LoginListener的类
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
//监听事件
public class LoginListener implements ActionListener{
private javax.swing.JTextField jt;//账号输入框对象
private javax.swing.JPasswordField jp;//密码输入框对象
private javax.swing.JFrame login;//定义一个窗体对象
public LoginListener(javax.swing.JFrame login,javax.swing.JTextField jt,javax.swing.JPasswordField jp) {
this.login=login;//获取登录界面
this.jt=jt;//获取登录界面中的账号输入框对象
this.jp=jp;//获取登录界面中的密码输入框对象
}
public void actionPerformed(ActionEvent e) {
//利用get方法来获取账号和密码对象的文本信息,并用equal方法进行判断。最好不要用==,用==这个地方验证不过去。
if(jt.getText().equals("Alex")&&jp.getText().equals("123")) {
//满足条件,则生成一个新的界面
javax.swing.JFrame jf=new javax.swing.JFrame();
jf.setTitle("登录后的用户界面");
jf.setSize(340,500);//只对*容器有效
jf.setDefaultCloseOperation(3);//窗体关闭时结束程序
jf.setLocationRelativeTo(null);//居中
jf.setResizable(false);
jf.setVisible(true);
// 通过我们获取的登录界面对象,用dispose方法关闭它
login.dispose();
}
}
}
注意点:验证判断的时候最好用equal方法来判断,用==的话会有问题。==要求完全相等。
实现后的登录界面如下
登录成功后
下一篇: 响应式网页开发登陆界面
推荐阅读
-
JAVA登录界面的实现(二)
-
【Android】登录界面的实现
-
再说Swing系列之登录界面的基本实现
-
用cookie和session实现自动登录 博客分类: JAVA EE javafilterservlet
-
用cookie和session实现自动登录 博客分类: JAVA EE javafilterservlet
-
Java下载图片二. 通过ImageIO类实现 博客分类: Java javaimagedownload
-
springboot框架中-java实现Excel、csv、txt 文件的批量导出数据-亲手实测(二)-csv & txt
-
Java Web 登录页面的实现
-
java 实现二分查找
-
Java实现二分查找