专栏首页算法与编程之美Java|系统登录功能的设计与制作

Java|系统登录功能的设计与制作

问题描述

登录模块是任何一个系统都不可或缺的一个模块,是系统的安全之门。登录模块通常由内容面板和登录窗体构成。

解决方案

1 内容面板

所有组件都要布置在窗体的内容面板上,而登录模块的内容面板使用了背景图片来美化窗体界面,这就需要继承Swing的JPanel类来编写自己的面板类,然后将该面板类作为窗体的内容面板。

内容面板的程序代码如下:

package com.lzw.login;
import java awt.*;
import java.net.URL;
import javax.swing.*;
 
public class LoginPanel extends JPanel{
 
    public int width,height;
    private image img;
 
    // 创建背景图片
    public LoginPanel(){
        super();
        URL url = getClass().getResource("......"); // 获取图片的URL。
        img = new imagelcon(url).getimage();
    }
 
    // 图片展示的位置
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawimage(img,0,0,this); // 以左上角为起点
    }
}

2 登录窗体

创建LoginDialog类,该类继承JFrame类,成为一个窗体。将内容面板设为LoginPanel类的对象。该窗体用于布置各种组件,来实现登录的界面。

窗体主要用到的控件如下表所示。

图1 控件表

3 事件处理

登录按钮的事件处理

登录按钮用于执行用户名和密码的验证工作,如果验证用户名和密码有效,则启动系统,否则禁止进入系统。

在登录按钮的动作事件监听器中,首先获取用户输入的用户名与密码信息,然后调用Dao类的checkLogin()方法,如果该方法返回true,则登录成功,否则禁止用户登录,并显示提示语句。

程序重要代码如下:

private JButton getLoginButton(){
    if(loginButton == null){
        loginButton = new JButton();
        loginButton.setBounds(new Rectangle(109,114,48,20));
        loginButton.setlcon(new imagelcon(getClass().getResource("..."))); // 给登录图标也添加上监听器
        loginButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                try{
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                   
                    // 验证登录信息
                    userStr = userField.getText(); // 获取用户名
                    Sting passStr = new String(passwordField.getPassword()); // 获取密码
 
                    // 开始验证
                    if(!Dao.checkLogin(userStr,passStr)){
                        JOptionPane.showMessageDialog(loginDialog.this,"信息核对错误!请输入正确信息!",JOptionPane.ERROR_MESSAGE);
 
                    return;
                    }
                }catch(Exception e1){
                    e1.printStackTrace();
                }
 
                // 显示主窗体
                mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                mainFrame.setVisible(true);
                mainFrame.getCzyStateLabel().setText(userStr);
                setVisible(false); // 隐藏窗体
            }
        })
    }
}

4 密码文本框的回车响应

在系统登录窗体的密码文本框中添加了按键事件监听器,它在获取到密码文本框输入的回车字符时将执行登录事件。此过程与单击登录按钮具有相同的作用。也就是说,输完密码后,用敲回车代替单击登录按钮。

程序代码如下:

private JpasswordField getPasswordField(){
    if(passwordField == null){
        passwordField == new JPasswordField();
        passwordField.setBounds(new Rectangle(143,69,125,22));
        passwordField.addKeyListener(
            new java.awt.event.KeyAdapter(){
            public void keyTyped(java.awt.event.KeyEvent e){
                if(e.getKeyChar() == '\n'){
                    loginButton.doClick();
                }
            }
        });
    }
    return passwordField;
}

结语

在本案例中最核心的技术就是对checkLogin()方法的使用,该方法是验证用户登录信息的关键所在。

本文分享自微信公众号 - 算法与编程之美(algo_coding),作者:李劲潮

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 计算机技术|卡片视图CardView

    在使用MUI开发APP的过程中,功能的融合和美观的布局,往往能使得项目得以顺利进展。不错的设计肯定离不开MUI的各个控件。对于每个控件的熟悉,并且能个灵活的运用...

    算法与编程之美
  • 涨知识|Google语法快速高效的搜索

    在日常生活中我们经常会用到Google、百度这样的搜索引擎。但是对于大多数的用户来说搜索的效率远远达不到预期的效果。所以为了提高搜索的效率我们需要学习一些常用的...

    算法与编程之美
  • 网页|通过geolocation获取地理位置信息

    获取用户地理位置信息,在各大网站、app中,例如淘宝,美团等购物平台已经是很常见的了。一些常见的旅游app,地图查询软件也都普遍的提供了位置定位等功能。常见的获...

    算法与编程之美
  • 安全运维3.1—跨站脚本漏洞(XSS)之反射型XSS(get)漏洞

    形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致"精心构造"的脚本输入后,在输到前端时被浏览器当做有效代码解析执行,从而产生危害。

    阿dai学长
  • # 如何调试go源码

    用户1175783
  • Visual Studio 2008 每日提示(十八)

    #171、在任务列表创建用户任务区分代码 原文链接:You can use the Task List to create User Tasks that a...

    Jianbo
  • 分类算法实例一:用Logistic算法进行乳腺癌数据分类

    魏晓蕾
  • Redis中的键值过期操作

    其中命令 ttl 的全称是 Time To Live 表示此键值在 n 秒后过期。例如,上面的结果 97 表示 key 在 97s 后过期。

    Java中文社群_老王
  • Docker 搭建nginx

    mkdir -p /www/log mkdir -p /www/html 2、 docker run -p 8801:80 --name nginx01 ...

    用户5760343
  • brpc介绍、编译与使用

            brpc又称为baidu-rpc,是百度开发一款“远过程调用”网络框架。目前该项目已在github上开源——https://github.com...

    方亮

扫码关注云+社区

领取腾讯云代金券