文章目录

  • 1. 实现功能概要
  • 2. 功能界面概览
  • 3. 代码详解
    • (1)选择身份登录方法实现
    • (2)登录按钮的响应
  • 4. 全部代码示例
  • 5. 包的存放位置
  • 6. 项目全部代码下载地址:JavaGUI超市进销存管理系统 所有代码
  • 7. Java GUI其他相关博客

1. 实现功能概要

这里是第三部分,我们的登录界面,与数据库信息进行核对,在看下面内容之前,我们具体要实现以下登录界面功能:

  • 登录界面需要连接数据库账户信息并进行核对。
  • 用户出现用户名或者密码错误要进行相应的警告框提示。
  • 根据不同的用户等级,进入不同的界面。

针对 第三个功能:
例如,用户身份是老板界面,那就进入老板管理界面,如果是普通员工,那就进入普通员工的界面。
我们把超级管理员,销售员,仓库管理员,销售员这四个身份分别建立单独的表。然后检索JComboBox组件的Item名,来进入不同的数据库,核对账户密码。

2. 功能界面概览

现展示JComboBox控件。


用户进入登录界面以后,先选择用户属性,然后输入用户名和密码后,进入相应管理界面。
不好意思各位,忘记改了,上面的“注册“按钮实际实现的是退出功能。
后面的登录界面中的”注册”按钮实际上都是退出。

1)用户登录界面,用JComboBox控件实现对不同用户的管理。

登录成功后随即进入超级管理员界面。(界面就凑合看吧,我就是做了个简单的实例。)

我们再来个采购员的登录实示例,其他身份的用户其实都一样的。

点击“确定”后,用户进入采购员界面了。

我这里就放了两个示例,接下来我会细细分析我的代码部分。尽量讲的详细点。

3. 代码详解

首先我们这个界面中,我们要用到的控件以及获得文本的方法如下:

控件名称 获取控件的文本方法
ComboBox(下拉单) getSelectedItem.toString().equals("ComboBox中addItem()方法中的内容");
JTextField 文本框 getText()
JPasswordField 密码文本框 getText() (使用时提示被弃用,但是可用)
Button --
Font 文本样式设计 --
JOptionPane 对话框技术 --

主要的就是一以上几个控件。实现很简单。
这里我就不一一介绍控件了,我们主要讲登录功能实现和根据不同用户登录不同界面的功能实现方法。

(1)选择身份登录方法实现

登录
连接数据库代码:下面的代码很长,但是不要慌,只是因为里面用户不同的身份有4个,每个都要检验用户名和密码。
我为四个身份用户分别建立了四个表,掌管不同的身份用户信息,所以下面每种身份用户都会进行一次数据库查询。此外,用户身份验证和核对,封装在check函数

再强调一点,获取JComboBox中Item方法是:

 jc1.getSelectedItem.toString().equals("");

euquals里面的参数是你之前给JComboBox里面addItem里面的String值:“超级管理员”,“”采购员“之类的

现在我们看一下JCoboBox是如何核对账户信息和密码的:

if (jc1.getSelectedItem().toString().equals("超级管理员")) {        //当用户选择“超级管理员”身份登录时String sql = "select * from denglu " + "where zhanghao = '" + name + "' and mima = '" //查询"denglu"的sql表格中用户信息。+ password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name) && rs.getString("mima").equals(password)) {    //如果用户输入的用户名和密码都和数据库中信息对得上。result = true;      //返回true} else {System.out.println(rs.getString("zhanghao").equals(name));System.out.println(rs.getString("mima").equals(password));return false;}}}

具体代码如下:

 public boolean check(String name, String password) {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}boolean result = false;try {String url = "jdbc:mysql://localhost:3306/supermarket?serverTimezone=CTT";// 注意设置时区,这个连接是8.0版本的mysql。String username = "root";String passwords = "Yuanfeng200517";Connection c = DriverManager.getConnection(url, username, passwords);if (c != null) {System.out.println("数据库连接成功!");} else {System.out.println("数据库连接失败!");}Statement s = c.createStatement();//上面的是为了建立数据而做驱动准备以及连接测试。if (jc1.getSelectedItem().toString().equals("超级管理员")) {        //当用户选择“超级管理员”身份登录时String sql = "select * from denglu " + "where zhanghao = '" + name + "' and mima = '"    //查询"denglu"的sql表格中用户信息。+ password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name) && rs.getString("mima").equals(password)) {    //如果用户输入的用户名和密码都和数据库中信息对得上。result = true;        //返回true} else {System.out.println(rs.getString("zhanghao").equals(name));System.out.println(rs.getString("mima").equals(password));return false;}}} else {if (jc1.getSelectedItem().toString().equals("供应商")) {        //当用户选择“供应商”身份登录时String sql = "select * from denglu2 " + "where zhanghao = '" + name + "' and mima = '"+ password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name)&& rs.getString("mima").equals(password)) {result = true; // 如果用户名和密码都正确,那么就将result返回为true;} else {return false;}}}if (jc1.getSelectedItem().toString().equals("采购员")) {String sql = "select * from denglu_purchase " + "where zhanghao = '" + name+ "' and mima = '" + password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name)&& rs.getString("mima").equals(password)) {result = true; // 如果用户名和密码都正确,那么就将result返回为true;} elsereturn false;}}/****************** 销售员 ********************/if (jc1.getSelectedItem().toString().equals("销售员")) {String sql = "select * from denglu_sell " + "where zhanghao = '" + name+ "' and mima = '" + password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name)&& rs.getString("mima").equals(password)) {result = true; // 如果用户名和密码都正确,那么就将result返回为true;} elsereturn false;}}/****************** 仓库管理员 ********************/if (jc1.getSelectedItem().toString().equals("仓库管理员")) {String sql = "select * from denglu_warehouse " + "where zhanghao = '" + name+ "' and mima = '" + password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name)&& rs.getString("mima").equals(password)) {result = true;} elsereturn false;}}}} catch (SQLException e2) {e2.printStackTrace();}return result;}

(2)登录按钮的响应

由于第一步中介绍了check()方法,对用户信息进行分类性验证。这里将我们的登录按钮响应事件。

  • 登录成功提示登陆成功,弹出相应的界面。
  • 登录失败提示用户或者密码输入错误,这里用到了对话框技术JOptionPane

当登录成功后,我们就new一个界面出来,这样就实现了我们登录成功进入相应的界面。

代码如下:

 bt1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String name = t1.getText(); // 获取文本框内的用户名String pass = t2.getText(); // 获取文本框内的密码if (0 == name.length()) {            //如果用户名中未输入信息,提示账号不能为空。JOptionPane.showMessageDialog(null, "账号不能为空");t1.grabFocus();return;}if (0 == pass.length()) {    //如果密码中未输入信息,提示密码不能为空。JOptionPane.showMessageDialog(null, "密码不可为空!");t2.grabFocus();return;}if (jc1.getSelectedItem().toString().equals("超级管理员")) {      if (check(name, pass)) {JOptionPane.showMessageDialog(null, "登陆成功");new user1();  //当登录成功以后,用户就自动进入到另一个界面“user1”。下面是一样的。} elseJOptionPane.showMessageDialog(null, "密码错误");}/* 仓库管理员的检查 */if (jc1.getSelectedItem().toString().equals("仓库管理员")) {if (check(name, pass)) {JOptionPane.showMessageDialog(null, "登陆成功");new user2();} elseJOptionPane.showMessageDialog(null, "密码错误");}/* 采购员的检查 */if (jc1.getSelectedItem().toString().equals("采购员")) {if (check(name, pass)) {JOptionPane.showMessageDialog(null, "登陆成功");new user3();} elseJOptionPane.showMessageDialog(null, "密码错误");}/* 销售员的检查 */if (jc1.getSelectedItem().toString().equals("销售员")) {if (check(name, pass)) {JOptionPane.showMessageDialog(null, "登陆成功");new user4();} elseJOptionPane.showMessageDialog(null, "密码错误");}}});

4. 全部代码示例

import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;import newGUI.PurchaseFrame;
import newGUI.StockFrame;
import test.user1;
import test.user2;
import test.user3;
import test.user4;public class Load_GUI extends JFrame implements ActionListener {static Load_GUI lg = null;        //放在Main函数中,用于加载窗体信息。//上面这部分代码是用来控制GUI风格的,我这里是Windows风格。//数据库信息private static String user = "root";        //连接数据库的用户名。//上面这个参数在最下面的this.setDefaultCloseOperation(),中使用参数。作用是,当我们打开连个窗口时,其中一个窗口关闭不会导致这个窗口也被迫关闭。private static String pass;                    //连接数据库的密码String url = "jdbc:mysql://localhost:3306/supermarket?serverTimezone=CTT";/* Lable控件 */JLabel l1 = new JLabel("XxxXX管理系统");JLabel l2 = new JLabel("用户名:");JLabel l3 = new JLabel("密码:");/* 控制Label中的字体风格 */Font f = new Font("楷体", Font.BOLD, 20);Font f2 = new Font("楷体", Font.BOLD, 15);/* 下拉单 */JComboBox jc1 = new JComboBox();/* 按钮 */JButton bt1 = new JButton("登录");JButton bt2 = new JButton("取消");/* 文本框 */JTextArea textarea;JTextField t1 = new JTextField();            //textField控件可以获取获取文本内容//JPasswordField t2 = new JPasswordField();        //密码输入框的专用控件private int defaultCloseOperation = HIDE_ON_CLOSE;{try {for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {if ("Nimbus".equals(info.getName())) {javax.swing.UIManager.setLookAndFeel(info.getClassName());break;}}} catch (Exception e) {System.out.println(e);}}public Load_GUI() {l1.setFont(f);        //字体风格Font参数和Label控件 名称为l1的对象 绑定。l2.setFont(f2);l3.setFont(f2);l1.setBounds(new Rectangle(100, 20, 220, 40));l2.setBounds(new Rectangle(40, 60, 200, 40));l3.setBounds(new Rectangle(40, 90, 200, 40));bt1.setBounds(new Rectangle(40, 180, 120, 25));bt2.setBounds(new Rectangle(220, 180, 120, 25));t1.setBounds(new Rectangle(100, 70, 180, 26));t2.setBounds(new Rectangle(100, 100, 180, 26));jc1.setBounds(new Rectangle(120, 130, 100, 26));/* 给对象名为jc1的Combobox控件,添加内容。 */jc1.addItem("超级管理员");jc1.addItem("仓库管理员");jc1.addItem("销售员");jc1.addItem("采购员");{bt2.addActionListener(new ActionListener() {//该事件监听用于 监听按钮"取消"事件。@Overridepublic void actionPerformed(ActionEvent e) {//如果用户按下”取消“按钮,程序退出。System.exit(0);}});bt1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String name = t1.getText(); // 获取文本框内的用户名String pass = t2.getText(); // 获取文本框内的密码if (0 == name.length()) {JOptionPane.showMessageDialog(null, "账号不能为空");t1.grabFocus();return;}if (0 == pass.length()) {JOptionPane.showMessageDialog(null, "密码不可为空!");t2.grabFocus();return;}if (jc1.getSelectedItem().toString().equals("超级管理员")) {if (check(name, pass)) {JOptionPane.showMessageDialog(null, "登陆成功");new user1();} elseJOptionPane.showMessageDialog(null, "密码错误");}/* 仓库管理员的检查 */if (jc1.getSelectedItem().toString().equals("仓库管理员")) {if (check(name, pass)) {JOptionPane.showMessageDialog(null, "登陆成功");new user2();} elseJOptionPane.showMessageDialog(null, "密码错误");}/* 采购员的检查 */if (jc1.getSelectedItem().toString().equals("采购员")) {if (check(name, pass)) {JOptionPane.showMessageDialog(null, "登陆成功");new user3();} elseJOptionPane.showMessageDialog(null, "密码错误");}/* 销售员的检查 */if (jc1.getSelectedItem().toString().equals("销售员")) {if (check(name, pass)) {JOptionPane.showMessageDialog(null, "登陆成功");new user4();} elseJOptionPane.showMessageDialog(null, "密码错误");}}});this.setTitle("登录");        //设置窗体标题名称this.setLayout(null); // 窗体布局设置为自定义,这行代码不可更换到其他位置//this.setSize(400, 300);this.add(bt2);this.add(bt1);this.add(l1);this.add(l2);this.add(l3);this.add(t1);this.add(t2);this.add(jc1);this.setBounds(800, 300, 400, 300);        //设置窗体规格this.setDefaultCloseOperation(1);this.setVisible(true);                    //窗体可以看见,如果是false,那么运行程序后窗体看不见,。this.setResizable(false);                //setResizable用于控制窗体大小可拉伸与否。false表示,窗体大小定死了。user = t1.getText();}}public static void main(String args[]) {lg = new Load_GUI();}@Overridepublic void actionPerformed(ActionEvent e) {}public boolean check(String name, String password) {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}boolean result = false;try {String url = "jdbc:mysql://localhost:3306/supermarket?serverTimezone=CTT";// 注意设置时区,这个连接是8.0版本的mysql。String username = "root";String passwords = "Yuanfeng200517";Connection c = DriverManager.getConnection(url, username, passwords);if (c != null) {System.out.println("数据库连接成功!");} else {System.out.println("数据库连接失败!");}Statement s = c.createStatement();if (jc1.getSelectedItem().toString().equals("超级管理员")) {String sql = "select * from denglu " + "where zhanghao = '" + name + "' and mima = '"+ password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name) && rs.getString("mima").equals(password)) {result = true;} else {System.out.println(rs.getString("zhanghao").equals(name));System.out.println(rs.getString("mima").equals(password));return false;}}} else {if (jc1.getSelectedItem().toString().equals("供应商")) {String sql = "select * from denglu2 " + "where zhanghao = '" + name + "' and mima = '"+ password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name)&& rs.getString("mima").equals(password)) {result = true; // 如果用户名和密码都正确,那么就将result返回为true;} else {return false;}}}if (jc1.getSelectedItem().toString().equals("采购员")) {String sql = "select * from denglu_purchase " + "where zhanghao = '" + name+ "' and mima = '" + password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name)&& rs.getString("mima").equals(password)) {result = true; // 如果用户名和密码都正确,那么就将result返回为true;} elsereturn false;}}/****************** 销售员 ********************/if (jc1.getSelectedItem().toString().equals("销售员")) {String sql = "select * from denglu_sell " + "where zhanghao = '" + name+ "' and mima = '" + password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name)&& rs.getString("mima").equals(password)) {result = true; // 如果用户名和密码都正确,那么就将result返回为true;} elsereturn false;}}/****************** 仓库管理员 ********************/if (jc1.getSelectedItem().toString().equals("仓库管理员")) {String sql = "select * from denglu_warehouse " + "where zhanghao = '" + name+ "' and mima = '" + password + "'";ResultSet rs = s.executeQuery(sql);while (rs.next()) {if (rs.getString("zhanghao").equals(name)&& rs.getString("mima").equals(password)) {result = true;} elsereturn false;}}}} catch (SQLException e2) {e2.printStackTrace();}return result;}
}

5. 包的存放位置

由于我们登录成功后会相应不同的界面,我设计的界面存放结构如下:

由于每个界面只是放了个Lable,所以这里只展示了一个界面的代码,后面的都差不多,把Label的内容改改就行:

package test;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;public class user1 extends JFrame{JLabel jlabel=new JLabel();public user1() {this.setTitle("超级管理员界面");this.setSize(600,500);this.setLayout(null);this.setLocation(400,400);this.jlabel=new JLabel("超级管理员界面");this.jlabel.setBounds(150, 120, 120, 30);this.add(jlabel);this.setVisible(true); this.setResizable(false);}public static void main(String [] args){new user1();}
}

实现出来就是这种界面:

6. 项目全部代码下载地址:JavaGUI超市进销存管理系统 所有代码

JavaGUI超市进销存管理系统 所有代码

7. Java GUI其他相关博客

本人所作的其他相关博客:

  1. Java窗体的创建,按钮的响应(最基础级别)收藏量23
  2. JavaGUI显示表格(连接数据库)基础(收藏量86)

这边建议各位使用快捷的窗体开发工具,JwindowBuilder,所有的窗体控件都是拖拽式的。具体使用各种博客都有。这里就不再赘述。

JavaGUI开发实践:登录界面模拟(连接数据库)相关推荐

  1. android studio 微信登录界面,如何使用Android Studio开发用户登录界面

    满意答案 zhou9081 2016.05.21 采纳率:51%    等级:7 已帮助:411人 如何使用Android Studio开发用户登录界面,具体解决方案如下: 解决方案1: <:t ...

  2. Android开发——程序锁的实现(可用于开发钓鱼登录界面)

    1. 程序锁原理 1.1 实现效果: 在用户打开一个应用时,若此应用是我们业务内的逻辑拦截目标,那就在开启应用之后,弹出一个输入密码的界面,输入密码正确则进入目标应用.若不输入直接按返回键,则直接返回 ...

  3. java用户登录界面并连接数据库(教师工资查询)

    java用户登录界面并连接数据库(教师工资查询) 环境 语言:Java:数据库:MySql:环境:JDK8+Eclipse 步骤 1.数据库设计 要求: 实现: 2.实现该教师工资表管理所设计的类和文 ...

  4. qt登录界面跳转_每天10分钟,木辛老师带你实战慕课软件开发:登录界面开发第2课...

    软件实战开始,快速提供编程能力:通过实战,分析产品需求,梳理设计需求,提升项目分析和架构的能力.快点跟着木辛老师一起学习吧! 请点击右上角"关注"按钮关注我们哟:跟着木辛老师学习P ...

  5. HTML/PHP/MySQL实现登录界面、连接数据库、数据库查询、数据在页面展示

    应用场景 帮女朋友做作业,需要用xampp实现网站建设,要求建立后台数据库.使用PHP实现页面查询.页面内容更新等功能. 本人自查自学,使用了较多的基础知识点,在此处记录下. 代码实现 以下涉及数据库 ...

  6. 响应式开发:登录界面实现

    学习了慕课网上响应式开发的课程,对响应式开发有了一定的了解,完成了一个简单的小实战,登录界面的实现. 具体资源详见: https://download.csdn.net/download/ayanga ...

  7. Kivy App开发之登录界面Demo

    登录界面是根据个人设想简单设计的,效果如下: 代码如下,新建login.kv <LoginPage>:FloatLayout:canvas.before:Rectangle:size:se ...

  8. Android程序登录界面设计

    刚刚学习Android开发,现在工作需要开发一个app的演示程序,首先就是要开发一个登录界面了.在网上找了很多材料,最后参考了博客中的登录界面设计方法: blog.csdn.net/StayFooli ...

  9. pyqt登录界面跳转及传值给主界面

    pyqt登录界面跳转及传值给主界面 开头 最近要做一个应用,其中一个模块要管理表格数据,设置登录界面.目的是实现登录界面验证身份,而后登录主窗口,将登录用户名传递给主窗口.本来也可以通过登录窗口对数据 ...

最新文章

  1. 码农技术炒股之路——数据库管理器、正则表达式管理器
  2. 微软、华为海思、高通等 50 家公司源代码被泄露!
  3. 2020年6月18日 618感言
  4. 成功解决 gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) - (device: 0, name: GeForce 94
  5. UIImageview 遮罩效果
  6. 【收藏】mydockfinder下载地址
  7. python字符串_Python字符串格式化%s%d%f详解
  8. 兄弟 DCP-7055打印机硒鼓清零方法
  9. python记录鼠标和键盘操作并重复_鼠标和键盘操作
  10. 三极管放大电路基本原理
  11. 大数据-玩转数据-Python几种数据采集
  12. JAVA300集——面向对象编程-类和对象-构造方法及其重载-方法调用
  13. RAD Studio XE (DelphiXE)官网下载地址与注册
  14. ad20栅格_AD软件的3种栅格设置详解
  15. 【C数据结构】单链表的实现以及链表和顺序表的优缺点
  16. Oracle OLAP 与 OLTP 介绍
  17. python并发测试脚本语言_python并发测试脚本
  18. catalog start with
  19. Python+OpenCV 实现Farneback光流法从RGB图像序列中提取光流
  20. Java 工程师成神之路 | 2019正式版 1

热门文章

  1. oracle数据库scn是什么
  2. 通达OA表单会签意见样式
  3. windows编程之画五角星
  4. w3school没有java的教程_javafx w3school教程
  5. android开发指南!阿里P7级别面试经验总结,知乎上转疯了!
  6. JSD-2204-API-正则-Object-包装类-Day18
  7. 小马智行进军前装量产,从自研域控制器入手?
  8. matlab 曲线拟合插值问题
  9. Artifical Neural Nets VS Neural Nets?人工神经网络VS神经网络?
  10. linux 程序退出 调试,linux驱动程序调试常用方法(printk,OOP,strace,hacking,ioctl,/proc,kgdb)...