欢迎点击「算法与编程之美」↑关注我们!
本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。
问题描述
登录模块是任何一个系统都不可或缺的一个模块,是系统的安全之门。登录模块通常由内容面板和登录窗体构成。
解决方案
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()方法的使用,该方法是验证用户登录信息的关键所在。
END
实习编辑 | 王文星
责 编 | 李劲潮
where2go 团队
微信号:算法与编程之美
长按识别二维码关注我们!
温馨提示: 点击页面右下角 “写留言”发表评论,期待您的参与!期待您的转发!