【技能实训】DMS数据挖掘项目-Day11

news2025/2/5 0:38:40

文章目录

  • 任务12
    • 【任务12.1】创建用户信息表
    • 【任务12.2】在com.qst.dms.entity下创建用户实体类User,以便封装用户数据
    • 【任务12.3】在com.qst.dms.service下创建用户业务类UserService
    • 【任务12.4】在项目根目录下创建图片文件夹images,存储dms.png
    • 【任务12.5】在com.qst.dms.ui下创建用户注册窗口RegistFrame,并将用户注册信息保存到数据库
  • 任务13
    • 【任务13.1】在com.qst.dms.ui下,创建用户登录窗口LoginFrame,登录成功则进入系统主界面
    • 【任务13.2】使用对话框优化LoginFrame登录窗口中的错误提示
    • 【任务13.3】使用对话框优化RegistFrame注册窗口中的错误提示

任务12

【任务12.1】创建用户信息表

create table user
(
username VARCHAR(50) not null,
password VARCHAR(50),
gender INTEGER,
hobby VARCHAR(500),
address VARCHAR(50),
degree VARCHAR(50)
);
0

【任务12.2】在com.qst.dms.entity下创建用户实体类User,以便封装用户数据

成员变量参考12.1

public User(String username, String password, int sex, String hobby, String address, String degree)

程序设计

package com.qst.dms.entity;

public class User {

    public String username;
    public String password;
    public Integer gender;
    public String hobby;
    public String address;
    public String degree;


    public User() {
    }

    public User(String username, String password, Integer gender, String hobby, String address, String degree) {
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.hobby = hobby;
        this.address = address;
        this.degree = degree;
    }



    /**
     * 获取
     * @return username
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * 获取
     * @return password
     */
    public String getPassword() {
        return password;
    }

    /**
     * 设置
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * 获取
     * @return gender
     */
    public Integer getGender() {
        return gender;
    }

    /**
     * 设置
     * @param gender
     */
    public void setGender(Integer gender) {
        this.gender = gender;
    }

    /**
     * 获取
     * @return hobby
     */
    public String getHobby() {
        return hobby;
    }

    /**
     * 设置
     * @param hobby
     */
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    /**
     * 获取
     * @return address
     */
    public String getAddress() {
        return address;
    }

    /**
     * 设置
     * @param address
     */
    public void setAddress(String address) {
        this.address = address;
    }

    /**
     * 获取
     * @return degree
     */
    public String getDegree() {
        return degree;
    }

    /**
     * 设置
     * @param degree
     */
    public void setDegree(String degree) {
        this.degree = degree;
    }

    public String toString() {
        return "User{username = " + username + ", password = " + password + ", gender = " + gender + ", hobby = " + hobby + ", address = " + address + ", degree = " + degree + "}";
    }
}

【任务12.3】在com.qst.dms.service下创建用户业务类UserService

// 根据用户名查询用户,各用户的用户名不能相同
public User findUserByName(String userName) 

// 保存用户信息
public boolean saveUser(User user) 

程序设计

package com.qst.dms.service;

import com.qst.dms.entity.User;
import com.qst.dms.util.DBUtil;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserService {

    DBUtil db = new DBUtil();
    Connection conn = null;

    // 根据用户名查询用户,各用户的用户名不能相同
    public User findUserByName(String userName) {
        // 返回符合条件的用户对象
        User user = new User();

        try {
            try {
                conn = db.getConnection();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }


            String querySqluser = "SELECT * FROM user WHERE username = ?";
            Object[] userParams = {userName};
            ResultSet userResult = db.executeQuery(querySqluser, userParams);
            db.commitAll();

            if (userResult.next()) {
                // 设置登出记录的属性值
                user.setUsername(userResult.getString("username"));
                user.setPassword(userResult.getString("password"));
                user.setAddress(userResult.getString("address"));
                user.setGender(userResult.getInt("gender"));
                user.setHobby(userResult.getString("hobby"));
                user.setDegree(userResult.getString("degree"));
            }
            userResult.close();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接,释放资源
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return user;
    }

    // 保存用户信息
    public boolean saveUser(User user) {
        // 返回保存结果,成功返回true,失败返回false
        try {
            try {
                conn = db.getConnection();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

            String querySqluser = "INSERT INTO user VALUES (?, ?, ?, ?, ?, ?)";
            Object[] queryParams = {user.getUsername(), user.getPassword(), user.getGender(), user.getHobby(), user.getAddress(), user.getDegree()};
            db.executeUpdate(querySqluser, queryParams);
            db.commitAll();
            return true;

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭数据库连接,释放资源
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
}

【任务12.4】在项目根目录下创建图片文件夹images,存储dms.png

【任务12.5】在com.qst.dms.ui下创建用户注册窗口RegistFrame,并将用户注册信息保存到数据库

Frame

Frame

  1. RegistFrame类,面板,7个标签,1个文本域,2个密码域,2个单选框,4个多选框,1个多行文本域,1个下拉复选框,2个按钮、user userService
  2. Logo 窗口标题 缩小、放大、关闭 标签 位置 大小
  3. Panel 面板,网格布局,布局 8行一列,嵌套面板,8个子面板,流式布局
  4. 7个标签,1个文本域,2个密码域,2个单选框,4个多选框,1个多行文本域,1个下拉复选框,2个按钮
  5. 8个子面板分别加入相关元素
  6. 单选框,男女单选框,单选组
  7. 确定动作及相关处理,动作监听
// 注册监听器,监听确定按钮
	btnOk.addActionListener(new RegisterListener());
  1. 重置动作及相关处理,动作监听
// 注册监听器,监听重置按钮
btnCancle.addActionListener(new ResetListener());
  1. RegistFrame中的成员属性如下:
// 主面板
private JPanel p;

// 标签
private JLabel lblName, lblPwd, lblRePwd, lblSex, lblHobby, lblAdress,
lblDegree;
// 用户名,文本框
private JTextField txtName;
// 密码和确认密码,密码框
private JPasswordField txtPwd, txtRePwd;
// 性别,单选按钮
private JRadioButton rbMale, rbFemale;
// 爱好,多选框
private JCheckBox ckbRead, ckbNet, ckbSwim, ckbTour;
// 地址,文本域
private JTextArea txtAdress;
// 学历,组合框
private JComboBox<String> cmbDegree;
// 确认和取消,按钮
private JButton btnOk, btnCancle;
// 注册的用户
private static User user;

// 用户业务类
private UserService userService;

// 构造方法
	public RegistFrame() {
		super("用户注册");

		// 实例化用户业务类对象
		userService = new UserService();
		
		// 设置窗体的icon
		ImageIcon icon = new ImageIcon("images\\dms.png");
		this.setIconImage(icon.getImage());

		// 设置面板布局,网格布局
		p = new JPanel(new GridLayout(8, 1));
		// 实例化组件
		lblName = new JLabel("用  户  名:");
		lblPwd = new JLabel("密        码:");
		lblRePwd = new JLabel("确认密码:");
		lblSex = new JLabel("性       别:");
		lblHobby = new JLabel("爱        好:");
		lblAdress = new JLabel("地        址:");
		lblDegree = new JLabel("学        历:");
		txtName = new JTextField(16);
		txtPwd = new JPasswordField(16);
		txtRePwd = new JPasswordField(16);
		rbMale = new JRadioButton("男");
		rbFemale = new JRadioButton("女");

		// 性别的单选逻辑
		ButtonGroup bg = new ButtonGroup();
		bg.add(rbMale);
		bg.add(rbFemale);

		ckbRead = new JCheckBox("阅读");
		ckbNet = new JCheckBox("上网");
		ckbSwim = new JCheckBox("游泳");
		ckbTour = new JCheckBox("旅游");
		txtAdress = new JTextArea(3, 20);

		// 组合框显示的学历数组
		String str[] = { "小学", "初中", "高中", "本科", "硕士", "博士" };
		cmbDegree = new JComboBox<String>(str);
		// 设置组合框可编辑
		cmbDegree.setEditable(true);
		btnOk = new JButton("确定");
		// 注册监听器,监听确定按钮
		btnOk.addActionListener(new RegisterListener());
		btnCancle = new JButton("重置");
		// 注册监听器,监听重置按钮
		btnCancle.addActionListener(new ResetListener());
		// 将组件分组放入面板,然后将小面板放入主面板
		JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p1.add(lblName);
		p1.add(txtName);
		p.add(p1);
		JPanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p2.add(lblPwd);
		p2.add(txtPwd);
		p.add(p2);
		JPanel p3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p3.add(lblRePwd);
		p3.add(txtRePwd);
		p.add(p3);
		JPanel p4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p4.add(lblSex);
		p4.add(rbMale);
		p4.add(rbFemale);
		p.add(p4);
		JPanel p5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p5.add(lblHobby);
		p5.add(ckbRead);
		p5.add(ckbNet);
		p5.add(ckbSwim);
		p5.add(ckbTour);
		p.add(p5);
		JPanel p6 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p6.add(lblAdress);
		p6.add(txtAdress);
		p.add(p6);
		JPanel p7 = new JPanel(new FlowLayout(FlowLayout.LEFT));
		p7.add(lblDegree);
		p7.add(cmbDegree);
		p.add(p7);
		JPanel p8 = new JPanel(new FlowLayout(FlowLayout.CENTER));
		p8.add(btnOk);
		p8.add(btnCancle);
		p.add(p8);
		// 主面板放入窗体中
		this.add(p);
		// 设置窗体大小和位置居中
		this.setSize(310, 350);
		this.setLocationRelativeTo(null);
		// 设置窗体不可改变大小
		this.setResizable(false);

		// 设置窗体初始可见
		this.setVisible(true);
	}

	// 监听类,负责处理确认按钮的业务逻辑
	private class RegisterListener implements ActionListener {
		// 重写actionPerFormed()方法,事件处理方法
		public void actionPerformed(ActionEvent e) {
			// 获取用户输入的数据
			
		}
	}

	// 监听类,负责处理重置按钮
	public class ResetListener implements ActionListener {
		// 重写actionPerFormed()方法,重置组件内容事件处理方法
		public void actionPerformed(ActionEvent e) {
			// 清空姓名、密码、确认密码内容
			txtName.setText("");
			txtPwd.setText("");
			txtRePwd.setText("");
			// 重置单选按钮为未选择
			rbMale.setSelected(false);
			rbFemale.setSelected(false);
			// 重置所有的复选按钮为未选择
			ckbRead.setSelected(false);
			ckbNet.setSelected(false);
			ckbSwim.setSelected(false);
			ckbTour.setSelected(false);
			// 清空地址栏
			txtAdress.setText("");
			// 重置组合框为未选择状态
			cmbDegree.setSelectedIndex(0);
		}
	}

程序设计

package com.qst.dms.ui;

import com.qst.dms.entity.User;
import com.qst.dms.service.UserService;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class RegistFrame extends JFrame{
    // 主面板
    private JPanel p;

    // 标签
    private JLabel lblName, lblPwd, lblRePwd, lblSex, lblHobby, lblAdress,
            lblDegree;
    // 用户名,文本框
    private static JTextField txtName;
    // 密码和确认密码,密码框
    private static JPasswordField txtPwd;
    private static JPasswordField txtRePwd;
    // 性别,单选按钮
    private static JRadioButton rbMale;
    private static JRadioButton rbFemale;
    // 爱好,多选框
    private static JCheckBox ckbRead;
    private static JCheckBox ckbNet;
    private static JCheckBox ckbSwim;
    private static JCheckBox ckbTour;
    // 地址,文本域
    private static JTextArea txtAdress;
    // 学历,组合框
    private static JComboBox<String> cmbDegree;
    // 确认和取消,按钮
    private JButton btnOk, btnCancle;
    // 注册的用户
    private static User user;

    // 用户业务类
    private UserService userService;
    private Image iconImage;

    // 构造方法
    public RegistFrame() {
        super();

        // 实例化用户业务类对象
        userService = new UserService();

        // 设置窗体的icon
        ImageIcon icon = new ImageIcon("images\\dms.png");
        this.setIconImage(icon.getImage());

        // 设置面板布局,网格布局
        p = new JPanel(new GridLayout(8, 1));
        // 实例化组件
        lblName = new JLabel("用  户  名:");
        lblPwd = new JLabel("密        码:");
        lblRePwd = new JLabel("确认密码:");
        lblSex = new JLabel("性       别:");
        lblHobby = new JLabel("爱        好:");
        lblAdress = new JLabel("地        址:");
        lblDegree = new JLabel("学        历:");
        txtName = new JTextField(16);
        txtPwd = new JPasswordField(16);
        txtRePwd = new JPasswordField(16);
        rbMale = new JRadioButton("男");
        rbFemale = new JRadioButton("女");

        // 性别的单选逻辑
        ButtonGroup bg = new ButtonGroup();
        bg.add(rbMale);
        bg.add(rbFemale);

        ckbRead = new JCheckBox("阅读");
        ckbNet = new JCheckBox("上网");
        ckbSwim = new JCheckBox("游泳");
        ckbTour = new JCheckBox("旅游");
        txtAdress = new JTextArea(3, 20);

        // 组合框显示的学历数组
        String str[] = { "小学", "初中", "高中", "本科", "硕士", "博士" };
        cmbDegree = new JComboBox<String>(str);
        // 设置组合框可编辑
        cmbDegree.setEditable(true);
        btnOk = new JButton("确定");
        // 注册监听器,监听确定按钮
        btnOk.addActionListener((ActionListener) new RegisterListener());
        btnCancle = new JButton("重置");
        // 注册监听器,监听重置按钮
        btnCancle.addActionListener(new ResetListener());
        // 将组件分组放入面板,然后将小面板放入主面板
        JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p1.add(lblName);
        p1.add(txtName);
        p.add(p1);
        JPanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p2.add(lblPwd);
        p2.add(txtPwd);
        p.add(p2);
        JPanel p3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p3.add(lblRePwd);
        p3.add(txtRePwd);
        p.add(p3);
        JPanel p4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p4.add(lblSex);
        p4.add(rbMale);
        p4.add(rbFemale);
        p.add(p4);
        JPanel p5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p5.add(lblHobby);
        p5.add(ckbRead);
        p5.add(ckbNet);
        p5.add(ckbSwim);
        p5.add(ckbTour);
        p.add(p5);
        JPanel p6 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p6.add(lblAdress);
        p6.add(txtAdress);
        p.add(p6);
        JPanel p7 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        p7.add(lblDegree);
        p7.add(cmbDegree);
        p.add(p7);
        JPanel p8 = new JPanel(new FlowLayout(FlowLayout.CENTER));
        p8.add(btnOk);
        p8.add(btnCancle);
        p.add(p8);
        // 主面板放入窗体中
        this.add(p);
        // 设置窗体大小和位置居中
        this.setSize(310, 400);
        this.setLocationRelativeTo(null);
        // 设置窗体不可改变大小
        this.setResizable(false);

        // 设置窗体初始可见
        this.setVisible(true);
    }


    public void setIconImage(Image iconImage) {
        this.iconImage = iconImage;
    }

    // 监听类,负责处理确认按钮的业务逻辑
    private class RegisterListener implements ActionListener {
        // 重写actionPerFormed()方法,事件处理方法
        public void actionPerformed(ActionEvent e) {
            // 获取用户输入的数据
            String userName = txtName.getText().trim();
            String password = new String(txtPwd.getPassword());
            String rePassword = new String(txtRePwd.getPassword());

            int sex = Integer.parseInt(rbFemale.isSelected()?"0":"1");
            String hobby = (ckbRead.isSelected()?"阅读":"")
                    + (ckbNet.isSelected()?"上网":"")
                    + (ckbNet.isSelected()?"游泳":"")
                    + (ckbNet.isSelected()?"旅游":"");

            String address = txtAdress.getText().trim();
            String degree = cmbDegree.getSelectedItem().toString().trim();

            //判断两次输入密码是否一致

            if (password.equals(rePassword)){
                //将数据封装到对象中
                user = new User(userName, password, sex, hobby, address, degree);

                //保存数据
                if (userService.saveUser(user)){
                    //输出提示信息
                    JOptionPane.showMessageDialog(null,"注册成功!","成功提示",JOptionPane.PLAIN_MESSAGE);
                }else{
                    //输出提示信息
                    JOptionPane.showMessageDialog(null,"注册失败!","错误提示",JOptionPane.ERROR_MESSAGE);
                }

            }else{
                //输出提示信息
                JOptionPane.showMessageDialog(null,"两次输入的密码不一致!","错误提示",JOptionPane.ERROR_MESSAGE);
            }

        }
    }
    // 监听类,负责处理重置按钮
    public static class ResetListener implements ActionListener {
        // 重写actionPerFormed()方法,重置组件内容事件处理方法
        public void actionPerformed(ActionEvent e) {
            // 清空姓名、密码、确认密码内容
            txtName.setText("");
            txtPwd.setText("");
            txtRePwd.setText("");
            // 重置单选按钮为未选择
            rbMale.setSelected(false);
            rbFemale.setSelected(false);
            // 重置所有的复选按钮为未选择
            ckbRead.setSelected(false);
            ckbNet.setSelected(false);
            ckbSwim.setSelected(false);
            ckbTour.setSelected(false);
            // 清空地址栏
            txtAdress.setText("");
            // 重置组合框为未选择状态
            cmbDegree.setSelectedIndex(0);
        }
    }
}

任务13

【任务13.1】在com.qst.dms.ui下,创建用户登录窗口LoginFrame,登录成功则进入系统主界面

Login

// 主面板
private JPanel p;
// 标签
private JLabel lblName, lblPwd;
// 用户名,文本框
private JTextField txtName;
// 密码,密码框
private JPasswordField txtPwd;
// 确认、取消和注册,按钮
private JButton btnOk, btnCancle, btnRegist;
// 登录用户
private static User user;

// 用户业务类
private UserService userService;

// 构造方法
	public LoginFrame() {
		super("登录");
		// 实例化用户业务类对象
		userService = new UserService();
		
		// 设置窗体的icon
		ImageIcon icon = new ImageIcon("images\\dms.png");
		this.setIconImage(icon.getImage());

		// 实例化组件
		p = new JPanel();
		// 使用null布局
		p.setLayout(null);
		lblName = new JLabel("用户名:");
		lblPwd = new JLabel("密    码:");
		txtName = new JTextField(20);
		txtPwd = new JPasswordField(20);
		txtPwd.setEchoChar('*');

		btnOk = new JButton("登录");
		btnOk.addActionListener(new LoginListener());

		btnCancle = new JButton("重置");
		btnCancle.addActionListener(new ResetListener());

		btnRegist = new JButton("注册");
		btnRegist.addActionListener(new RegistListener());

		lblName.setBounds(30, 30, 60, 25);
		lblPwd.setBounds(30, 60, 60, 25);
		txtName.setBounds(95, 30, 120, 25);
		txtPwd.setBounds(95, 60, 120, 25);
		btnOk.setBounds(30, 90, 60, 25);
		btnCancle.setBounds(95, 90, 60, 25);
		btnRegist.setBounds(160, 90, 60, 25);

		p.add(lblName);
		p.add(txtName);
		p.add(lblPwd);
		p.add(txtPwd);
		p.add(btnOk);
		p.add(btnCancle);
		p.add(btnRegist);

		// 主面板放入窗体中
		this.add(p);
		// 设置窗体大小和位置
		this.setSize(250, 170);
		// 设置窗口在屏幕中央
		this.setLocationRelativeTo(null);
		// 设置窗体不能改变大小
		this.setResizable(false);
		// 设置窗体的默认关闭按钮
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 设置窗体初始可见
		this.setVisible(true);
	}

	// 监听类,负责处理登录按钮
	public class LoginListener implements ActionListener {
		// 重写actionPerFormed()方法,事件处理逻辑
		public void actionPerformed(ActionEvent e) {
			// 根据用户名查询用户
			
		}
	}

	// 监听类,负责处理重置按钮
	public class ResetListener implements ActionListener {
		// 重写actionPerFormed()方法,事件处理方法
		public void actionPerformed(ActionEvent e) {
			// 清空文本框
			txtName.setText("");
			txtPwd.setText("");
		}
	}

	// 监听类,负责处理注册按钮
	public class RegistListener implements ActionListener {
		// 重写actionPerFormed()方法,事件处理方法
		public void actionPerformed(ActionEvent e) {
			// 创建注册窗口
			new RegistFrame();
		}
	}

程序设计

package com.qst.dms.ui;

import com.qst.dms.entity.User;
import com.qst.dms.service.UserService;
import sun.rmi.log.ReliableLog;
import sun.rmi.runtime.Log;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginFrame extends JFrame {
    // 主面板
    private JPanel p;
    // 标签
    private JLabel lblName, lblPwd;
    // 用户名,文本框
    private JTextField txtName;
    // 密码,密码框
    private JPasswordField txtPwd;
    // 确认、取消和注册,按钮
    private JButton btnOk, btnCancle, btnRegist;
    // 登录用户
    private static User user;

    // 用户业务类
    private UserService userService;

    // 构造方法
    public LoginFrame() {
        super("登录");
        // 实例化用户业务类对象
        userService = new UserService();

        // 设置窗体的icon
        ImageIcon icon = new ImageIcon("images\\dms.png");
        this.setIconImage(icon.getImage());

        // 实例化组件
        p = new JPanel();
        // 使用null布局
        p.setLayout(null);
        lblName = new JLabel("用户名:");
        lblPwd = new JLabel("密    码:");
        txtName = new JTextField(20);
        txtPwd = new JPasswordField(20);
        txtPwd.setEchoChar('*');

        btnOk = new JButton("登录");
        btnOk.addActionListener((ActionListener) new LoginListener());

        btnCancle = new JButton("重置");
        btnCancle.addActionListener(new RegistFrame.ResetListener());

        btnRegist = new JButton("注册");
        btnRegist.addActionListener(new RegistListener());

        lblName.setBounds(30, 30, 60, 25);
        lblPwd.setBounds(30, 60, 60, 25);
        txtName.setBounds(95, 30, 120, 25);
        txtPwd.setBounds(95, 60, 120, 25);
        btnOk.setBounds(30, 90, 60, 25);
        btnCancle.setBounds(95, 90, 60, 25);
        btnRegist.setBounds(160, 90, 60, 25);

        p.add(lblName);
        p.add(txtName);
        p.add(lblPwd);
        p.add(txtPwd);
        p.add(btnOk);
        p.add(btnCancle);
        p.add(btnRegist);

        // 主面板放入窗体中
        this.add(p);
        // 设置窗体大小和位置
        this.setSize(250, 170);
        // 设置窗口在屏幕中央
        this.setLocationRelativeTo(null);
        // 设置窗体不能改变大小
        this.setResizable(false);
        // 设置窗体的默认关闭按钮
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 设置窗体初始可见
        this.setVisible(true);
    }

    // 监听类,负责处理登录按钮
    public class LoginListener implements ActionListener {
        // 重写actionPerFormed()方法,事件处理逻辑
        public void actionPerformed(ActionEvent e) {
            // 根据用户名查询用户
            user = userService.findUserByName((txtName.getText().trim()));
            if(user != null) {
                //判断输入的密码是否正确
                if (user.getPassword().equals(new String(txtPwd.getPassword()))) {
                    //输出提示信息
                    JOptionPane.showMessageDialog(null,"登录成功!","成功提示",JOptionPane.PLAIN_MESSAGE);
                    //登录成功
                    LoginFrame.this.setVisible(false);
                    //显示主窗口
                    //new MainFrame();
                } else {
                    //输出提示信息
                    JOptionPane.showMessageDialog(null, "密码错误!请重新输入!", "错误提示", JOptionPane.ERROR_MESSAGE);
                    //清空密码框
                    txtPwd.setText("");
                }
            }else{
                //输出提示信息
                JOptionPane.showMessageDialog(null,"该用户不存在,请先注册!","错误提示",JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    // 监听类,负责处理重置按钮
    public class ResetListener implements ActionListener {
        // 重写actionPerFormed()方法,事件处理方法
        public void actionPerformed(ActionEvent e) {
            // 清空文本框
            txtName.setText("");
            txtPwd.setText("");
        }
    }

    // 监听类,负责处理注册按钮
    public class RegistListener implements ActionListener {
        // 重写actionPerFormed()方法,事件处理方法
        public void actionPerformed(ActionEvent e) {
            // 创建注册窗口
            new RegistFrame();
        }
    }
}

【任务13.2】使用对话框优化LoginFrame登录窗口中的错误提示

JOptionPane.showMessageDialog(null,"密码错误!请重新输入!","错误提示",	JOptionPane.ERROR_MESSAGE);

JOptionPane.showMessageDialog(null,"该用户不存在,请先注册!","错误提示",JOptionPane.ERROR_MESSAGE);

【任务13.3】使用对话框优化RegistFrame注册窗口中的错误提示

JOptionPane.showMessageDialog(null,"注册成功!","成功提示",JOptionPane.PLAIN_MESSAGE);

JOptionPane.showMessageDialog(null,"注册失败!","错误提示",JOptionPane.ERROR_MESSAGE);

JOptionPane.showMessageDialog(null,"两次输入的密码不一致!","错误提示",JOptionPane.ERROR_MESSAGE);

测试

注册界面
1
2
3

登录界面

4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

了解数据科学中的异常检测

大家好&#xff0c;本文将简要介绍一下异常检测&#xff0c;并指导通过不同的技术来识别异常。 如果你正在处理数据&#xff0c;那么无论是现在还是将来&#xff0c;都可能会遇到一项非常重要的任务 —— 异常检测。它在许多领域中都有很大的应用&#xff0c;如制造业、金融和…

visual studio 2017直接打开文件夹时,选择当前项目或者整个解决方案时,按快捷键查找时显示未找到以下指定文本

有的时候只想要打开一整个文件夹来看里面的代码&#xff0c;平时一般用Qt&#xff0c;但是感觉在打开整个文件夹看代码方面&#xff0c;Qt没有VS方便&#xff0c;于是选择了VS&#xff0c;安装的是VS2017&#xff0c;然后发现有个问题&#xff0c;CtrlF查找时&#xff0c;如果选…

报错:Invalid bound statement (not found): com.web.sysmgr.mapper.UserMapper.login

报错&#xff1a;Invalid bound statement (not found): com.web.sysmgr.mapper.UserMapper.login 原因&#xff1a; 确认是否在扫描Mapper接口时指定了正确的包路径。检查 MapperScan 注解中的包路径是否正确&#xff0c;确保只扫描到需要的Mapper接口。 如果在配置类中去配置…

JQuery 实现点击按钮添加 input 框

前言 用于记录开发中常用到的&#xff0c;快捷开发 需求 比如说&#xff0c;我台设备可以设置一个或多个秘钥&#xff0c;有时候我配置一个秘钥时&#xff0c;就不需要多个输入框&#xff0c;当我想配置多个秘钥时&#xff0c;就需要添加多个输入框。 实现 HTML <div…

Hadoop 之 HDFS 伪集群模式配置与使用(二)

HDFS 配置与使用 一.HDFS配置二.HDFS Shell1.默认配置说明2.shell 命令 三.Java 读写 HDFS1.Java 工程配置2.测试 一.HDFS配置 ## 基于上一篇文章进入 HADOOP_HOME 目录 cd $HADOOP_HOME/etc/hadoop ## 修改文件权限 chown -R root:root /usr/local/hadoop/hadoop-3.3.6/* ## …

JVM 运行流程、类加载、垃圾回收

一、JVM 简介 1、JVM JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别…

Android Profiler 内存分析器使用

Android Profiler是Android Studio的一部分&#xff0c;提供了一个集成的性能分析工具套件&#xff0c;包括内存分析。Android Profiler 工具可提供实时数据&#xff0c;帮助您了解应用的 CPU、内存、网络和电池资源使用情况。 在Android Profiler中&#xff0c;您可以查看内存…

赋能安防“新视界”!智汇云舟亮相中国安防工程商集成商大会

7月14日&#xff0c;备受业界关注的中国安防工程商&#xff08;系统集成商&#xff09;大会暨第67届中国安防新产品、新技术成果展示在上海盛大开幕。来自上海、苏州、南京、无锡等城市的200余位行业领导、嘉宾莅临参会&#xff0c;智汇云舟副总裁陈虹旭受邀出席活动并发表《视…

2、Redis高级特性和应用(发布 订阅、Stream)

Redis高级特性和应用(发布 订阅、Stream) 发布和订阅 Redis提供了基于“发布/订阅”模式的消息机制&#xff0c;此种模式下&#xff0c;消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道( channel)发布消息&#xff0c;订阅该频道的每个客户端都可以收到该消息。 …

【云原生|Docker系列第3篇】Docker镜像的入门实践

欢迎来到Docker入门系列的第三篇博客&#xff01;在前两篇博客中&#xff0c;我们已经了解了什么是Docker以及如何安装和配置它。本篇博客将重点介绍Docker镜像的概念&#xff0c;以及它们之间的关系。我们还将学习如何拉取、创建、管理和分享Docker镜像&#xff0c;这是使用Do…

链表OJ(LeetCode)

文章目录 1.移除链表元素2.反转链表3.链表的中间结点4.倒数第k个结点5.合并两个有序链表6.链表分割7.链表的回文结构8.相交链表9.环形链表10.环形链表Ⅱ1.常规思路2.新型思路【无码】 1.移除链表元素 法一&#xff1a;遍历删除 struct ListNode {int val;struct ListNode* nex…

采集极验4滑块验证码图片数据

在网络安全领域&#xff0c;验证码是一种常见的用于验证用户身份或防止恶意机器人攻击的技术。而极验4滑块验证码作为一种广泛应用的验证码形式&#xff0c;其具有较高的安全性和防御能力。本文将以获取极验4滑块验证码图片数据为主题&#xff0c;介绍相关技术和方法。 一、极…

【Jenkins入门到实战】忽如一夜春风来,千树万树梨花开

自动化运维之Jenkins 前提条件&#xff1a;安装好jdk &#xff08;版本要求11-17&#xff09;并配置好环境变量 一、Jenkins 1、Jenkins是什么 Jenkins是一个开源的持续集成服务&#xff0c;用于实施软件开发和发布流程。它帮助软件开发和运维团队在构建、测试和部署软件上实…

cesium的使用

cesium的使用 cesium的使用创建一个vue项目 vuevitecesium参数的使用常用点位标记删除动态渲染路线借助truf.js的算法进行渲染地块的实现topojson cesium的使用 1.下载或者安装cesium的插件 官方文档 下载下来后创建文件夹整个包引入 2.生成token 新的包应该有默认token如果没…

前端学习记录~2023.7.10~CSS杂记 Day5

前言一、样式化表格1、一个典型的 HTML 表格2、进行样式化&#xff08;1&#xff09;间距和布局&#xff08;2&#xff09;简单地排版&#xff08;3&#xff09;图形和颜色&#xff08;4&#xff09;图案&#xff08;5&#xff09;样式化标题 最终效果如下 ![在这里插入图片描述…

【Spring Cloud Alibaba】Nacos的服务注册和发现(discovery)的使用

【Spring Cloud Alibaba】系列文章 标题链接【Spring Cloud Alibaba】Nacos的安装与介绍以及Nacos集群的安装https://masiyi.blog.csdn.net/article/details/129530053【Spring Cloud Alibaba】Nacos config的使用和高阶用法https://masiyi.blog.csdn.net/article/details/129…

LabVIEW通过嘴唇图像识别为残疾人士开发文本输入系统

LabVIEW通过嘴唇图像识别为残疾人士开发文本输入系统 近年来&#xff0c;计算机已经成为现代人日常生活中的一种信息器具。人们可以使用计算机来处理复杂的文件&#xff0c;获取新信息并在线购物等。但是&#xff0c;上面讲的使用电脑的所有好处对普通人来说都很方便&#xff…

React05-样式隔离

一、样式隔离方案 css 的样式是全局样式&#xff0c;在书写react组件时&#xff0c;如果写了相同的样式类名&#xff0c;很容易造成样式污染。 在 vue 中&#xff0c;vue 官方提供了样式隔离方法&#xff0c;在组件代码中的 style 标签中加入 scoped&#xff0c;可以让这部分…

Python案例分析|使用Python图像处理库Pillow处理图像文件

本案例通过使用Python图像处理库Pillow&#xff0c;帮助大家进一步了解Python的基本概念&#xff1a;模块、对象、方法和函数的使用 使用Python语言解决实际问题时&#xff0c;往往需要使用由第三方开发的开源Python软件库。 本案例使用图像处理库Pillow中的模块、对象来处理…

Java中的JDBC编程(数据库系列6)

目录 前言&#xff1a; 1.什么是Java的JDBC编程 2.JDBC的数据库驱动包的导入过程 3.JDBC代码的编写 3.1创建并初始化一个数据源 3.2和数据库服务器建立连接 3.3构造SQL语句 3.4执行SQL语句 3.5释放必要的资源 3.6整体代码的展示及演示 3.7代码的优化 3.8 查询操作的…