IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> GUI 用户登录 -> 正文阅读

[大数据]GUI 用户登录


GUI 用户登录

  • 用户登录界面
    在这里插入图片描述

  • 功能实现要利用JDBC操作数据库

  • 登录成功,弹出消息框提示用户 - 恭喜,登录成功!

  • 登录失败,弹出消息框提示用户 - 遗憾,登录失败!账号或密码错误!

  • 要求采用MVC架构
    在这里插入图片描述

一,实施编程

创建数据库和表

(1)创建学生数据库

在Navicat新建查询输入下列语句,然后运行创建student数据库。

CREATE DATABASE student CHARSET=‘utf8mb4’;

(2)新建t_use表

在Navicat中新建查询,再输入下列语句,然后运行创建t_user表。

CREATE TABLE t_user (
id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘用户ID’,
username varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘用户名’,
password varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘用户密码’,
telephone varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘联系电话’,
register_time timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘注册时间’,
PRIMARY KEY (id) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4;

(3)为t_user插入三条记录

在Navicat中新建查询,再输入下列三条语句,然后运行插入记录到t_user表中。

INSERT INTO t_user (username, password, telephone, register_time)
VALUES (‘admin’, ‘12345’, ‘13945456780’, ‘2022-01-01 09:10:34’);

INSERT INTO t_user (username, password, telephone, register_time)
VALUES (‘brown’, ‘11111’, ‘13878789089’, ‘2022-03-12 19:05:44’);

INSERT INTO t_user (username, password, telephone, register_time)
VALUES (‘alice’, ‘22222’, ‘15834345670’, ‘2022-04-04 15:16:24’);

二、创建用户实体类

import java.util.Date;
/**
 * 功能:用户实体类
 * 作者:梁辰兴
 * 日期:2022年06月02日
 */
public class User {
    private int id;
    private String username;
    private String password;
    private String telephone;
    private Date registerTime;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public Date getRegisterTime() {
        return registerTime;
    }

    public void setRegisterTime(Date registerTime) {
        this.registerTime = registerTime;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", telephone='" + telephone + '\'' +
                ", registerTime=" + registerTime +
                '}';
    }
}

三、添加数据库驱动程序包

1.在项目根目录创建libs目录,添加数据库驱动程序包。

在这里插入图片描述

2.此时,这个jar包还不能被项目使用,需要作为库添加到项目里。

在这里插入图片描述

3.单击 Add as Library… 菜单项,在create library对话框中不做设置,直接点击OK按钮。

在这里插入图片描述

4.这时,数据库驱动程序包就可以被项目使用了。

在这里插入图片描述

5.查看JDBC重要的接口和类。

在这里插入图片描述

四、创建数据库连接管理类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 功能:数据库连接管理类
 * 作者:梁辰兴
 * 日期:2022年06月09日
 */
public class ConnectionManager {
    // 数据库连接属性
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String URL = "jdbc:mysql://localhost:3306/student?useSSL=false";
    private static final String USER = "root";
    private static final String PASSWORD = "903213"; // 改成自己数据库的密码

    /**
     * 私有化构造方法,拒绝实例化
     */
    private ConnectionManager() {
    }

    /**
     * 获取数据库连接静态方法
     *
     * @return 数据库连接
     */
    public static Connection getConnection() {
        // 定义数据库连接
        Connection conn = null;

        try {
            // 安装数据库驱动
            Class.forName(DRIVER);
            // 获取数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
            // 提示用户数据库连接成功
            System.out.println("提示:数据库连接成功~");
        } catch (ClassNotFoundException e) {
            System.err.println("异常:数据库驱动程序未找到!");
        } catch (SQLException e) {
            System.err.println("异常:数据库连接失败!");
        }

        // 返回数据库连接
        return conn;
    }

    /**
     * 关闭数据库连接静态方法
     *
     * @param conn
     */
    public static void closeConnection(Connection conn) {
        // 判断连接是否为空
        if (conn != null) {
            try {
                // 判断连接是否关闭
                if (!conn.isClosed()) {
                    // 关闭数据库连接,释放资源
                    conn.close();
                    // 提示用户
                    System.out.println("提示:数据库连接关闭~");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 主方法测试数据库连接
     *
     * @param args
     */
    public static void main(String[] args) {
        // 获取数据库连接
        Connection conn = getConnection();
        // 关闭数据库连接
        closeConnection(conn);
    }
}

五、创建用户数据访问接口

import d01.a01.User;
import java.util.List;

/**
 * 功能:用户数据访问接口
 * 作者:梁辰兴
 * 日期:2022年06月02日
 */
public interface UserDao {
    int insert(User user);
    int delete(int id);
    int update(User user);
    User findById(int id);
    List<User> findAll();
    User login(String username, String password);
}

六、创建用户数据访问接口实现类

import d01.a01.User;
import d01.dao.UserDao;
import d01.dbutils.ConnectionManager;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 功能:用户数据访问接口实现类
 * 作者:梁辰兴
 * 日期:2022年06月09日
 */
public class UserDaoImpl implements UserDao {
    @Override
    public int insert(User user) {
        return 0;
    }

    @Override
    public int deleteById(int id) {
        return 0;
    }

    @Override
    public int update(User user) {
        return 0;
    }

    @Override
    public int findById(int id) {
        return 0;
    }

    @Override
    public List<User> findAll() {
        // 定义用户列表
        List<User> users = new ArrayList<>();

        // 获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 创建SQL字符串
        String strSQL = "select * from t_user";

        try {
            // 创建语句对象
            Statement stmt = conn.createStatement();
            // 执行SQL查询,返回结果集
            ResultSet rs = stmt.executeQuery(strSQL);
            // 遍历结果集,构建用户列表
            while (rs.next()) {
                // 创建用户对象
                User user = new User();
                // 用当前记录字段值设置用户对象属性值
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setTelephone(rs.getString("telephone"));
                user.setRegisterTime(rs.getTimestamp("register_time"));
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);
        }


        // 返回用户列表
        return users;
    }

    @Override
    public User login(String username, String password) {
        // 定义用户对象
        User user = null;
        // 获取数据库连接
        Connection conn = ConnectionManager.getConnection();
        // 创建SQL字符串
        String strSQL = "select * from t_user where username = ? and password = ?";
        try {
            // 创建预备语句对象(准备提供参数)
            PreparedStatement pstmt = conn.prepareStatement(strSQL);
            // 用参数值去设置占位符的值
            pstmt.setString(1, username);
            pstmt.setString(2, password);
            // 执行SQL查询,返回结果集
            ResultSet rs = pstmt.executeQuery();
            // 遍历结果集,用记录值填充用户对象
            while (rs.next()) {
                // 创建用户对象
                user = new User();
                // 用当前记录字段值设置用户对象属性值
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setTelephone(rs.getString("telephone"));
                user.setRegisterTime(rs.getTimestamp("register_time"));
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } finally {
            ConnectionManager.closeConnection(conn);
        }
        // 返回用户对象
        return user;
    }
}

七、创建用户服务类

import d01.a01.User;
import d01.dao.UserDao;
import d01.dao.impl.UserDaoImpl;

import java.util.List;

/**
 * 功能:用户服务类
 * 作者:梁辰兴
 * 日期:2022年06月09日
 */
public class UserService {
    private UserDao userDao;

    public UserService() {
        userDao = new UserDaoImpl();
    }

    public int addUser(User user) {
        return userDao.insert(user);
    }

    public int deleteUser(int id) {
        return userDao.deleteById(id);
    }

    public int updateUser(User user) {
        return userDao.update(user);
    }

    public User findUserById(int id) {
        return userDao.findById(id);
    }

    public List<User> findAllUser() {
        return userDao.findAll();
    }

    public User login(String username, String password) {
        return userDao.login(username, password);
    }
}

八、创建用户登录界面

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;

/**
 * 功能:用户登录窗口
 * 作者:梁辰兴
 * 日期:2022年06月09日
 */
public class LoginFrame extends JFrame {
    private String username;
    private String password;

    private JLabel lblUsername;
    private JLabel lblPassword;
    private JTextField txtUsername;
    private JPasswordField txtPassword;

    private JButton btnOK;
    private JButton btnCancel;

    private JPanel panel, panel1, panel2, panel3;

    /**
     * 有参构造方法
     *
     * @param title
     */
    public LoginFrame(String title) {
        super(title);
        initGUI(); // 调用初始化图形用户界面方法
    }

    /**
     * 初始化图形用户界面方法
     */
    private void initGUI() {
        // 实例化组件(面板与控件)
        panel = (JPanel) getContentPane();
        panel1 = new JPanel();
        panel2 = new JPanel();
        panel3 = new JPanel();

        lblUsername = new JLabel("用户名:");
        lblPassword = new JLabel("密    码:");
        txtUsername = new JTextField(15);
        txtPassword = new JPasswordField(15);
        btnOK = new JButton("确定[O]");
        btnCancel = new JButton("取消[C]");

        // 将控件添加到三个小面板
        panel1.add(lblUsername);
        panel1.add(txtUsername);
        panel2.add(lblPassword);
        panel2.add(txtPassword);
        panel3.add(btnOK);
        panel3.add(btnCancel);

        // 设置主面板为三行一列的网格布局
        panel.setLayout(new GridLayout(3, 1));
        // 将三个小面板依次添加到主面板
        panel.add(panel1);
        panel.add(panel2);
        panel.add(panel3);

        // 设置按钮热键字母
        btnOK.setMnemonic(KeyEvent.VK_O);
        btnCancel.setMnemonic(KeyEvent.VK_C);
        // 设置密码框回显字符
        txtPassword.setEchoChar('*');

        // 设置窗口大小
        setSize(250, 200);
        // 设置窗口屏幕居中
        setLocationRelativeTo(null);
        // 设置窗口不可调整大小
        setResizable(false);
        // 设置窗口刚好容纳组件
        pack();
        // 设置窗口可见
        setVisible(true);
        // 设置窗口默认关闭操作
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }

    public static void main(String[] args) {
        new LoginFrame("用户登录");
    }
}
  • 运行代码,结果如下。
    在这里插入图片描述

九、实现用户登录功能

  • 涉及GUI的事件处理机制:事件、事件源、监听器(事件处理方法)。
    在这里插入图片描述
  • 创建事件处理方法eventHanding(),并在构造方法里调用。
/**                                                                                                                   
 * 事件处理                                                                                                               
 */                                                                                                                   
private void eventsHandling() {                                                                                       
    // 给【确定】按钮注册监听器                                                                                                   
    btnOK.addActionListener(new ActionListener() {                                                                    
        @Override                                                                                                     
        public void actionPerformed(ActionEvent e) {                                                                  
            // 获取用户输入的用户名和密码                                                                                          
            username = txtUsername.getText().trim();                                                                  
            password = new String(txtPassword.getPassword());                                                         
            // 创建用户服务对象                                                                                               
            UserService userService = new UserService();                                                              
            // 调用服务对象的登录方法                                                                                            
            User user = userService.login(username, password);                                                        
            // 判断用户登录是否成功                                                                                             
            if (user != null) {                                                                                       
                // 弹出消息框提示用户                                                                                          
                JOptionPane.showMessageDialog(null, "恭喜,[" + username + "]登录成功~");                                    
                dispose(); // 关闭登录窗口                                                                                  
            } else {                                                                                                  
                // 弹出消息框提示用户                                                                                          
                JOptionPane.showMessageDialog(null, "遗憾,用户名或密码错误~");                                                  
                // 清空两个文本框                                                                                            
                txtUsername.setText("");                                                                              
                txtPassword.setText("");                                                                              
                // 让姓名文本框获取焦点                                                                                         
                txtUsername.requestFocus();                                                                           
            }                                                                                                         
        }                                                                                                             
    });                                                                                                               
                                                                                                                      
    // 给【取消】按钮注册监听器                                                                                                   
    btnCancel.addActionListener(new ActionListener() {                                                                
        @Override                                                                                                     
        public void actionPerformed(ActionEvent e) {                                                                  
            System.exit(0); // 退出应用程序                                                                                 
        }                                                                                                             
    });                                                                                                               
}                                                                                                                     

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:40:05  更:2022-06-14 22:41:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:02:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码