先说的话

没有好看的ui,用的原生swing。
没有复杂的设计思路,作为萌新,就写着玩。

主要思路

用swing设计两个窗口,一个注册,一个登陆。登陆窗口里通过注册按钮可以跳转到注册界面,输入账号密码后如果符合要求则将账号存入于mysql数据库。登录时进行mysql查询对比,进而判断是否符合登录成功的要求。

用到的包

import java.awt.event.*;
import java.sql.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import java.util.Objects;
import javax.swing.JOptionPane;

登录界面的面板设置

一开始对于ui美观方面没去了解,所以我就没搞特殊的,想着反正功能可以实现就可以。登录界面两个label,两个lineedit,两个button。

private static void SetPlaceComponent(JPanel panel){panel.setLayout(null);//设置布局的,暂时先null//创建用户名的labelJLabel label_user=new JLabel("User");label_user.setBounds(100,20,165,25);panel.add(label_user);//创建用户名输入框JTextField textField=new JTextField();textField.setBounds(200,20,300,25);panel.add(textField);//禁止了用户名框输入空格textField.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {if(KeyEvent.VK_SPACE==e.getKeyChar()){e.consume();}}//接口需要继承所有的方法@Overridepublic void keyPressed(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}});//创建密码的labelJLabel label_password=new JLabel("Password");label_password.setBounds(100,80,165,25);panel.add(label_password);//创建密码的输入框JPasswordField jPasswordField=new JPasswordField();jPasswordField.setBounds(200,80,300,25);panel.add(jPasswordField);//创建一个登陆框JButton jButton_login=new JButton("login");jButton_login.setBounds(100,130,80,25);panel.add(jButton_login);jButton_login.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String user=new String("123");//如果直接用textField.getText()==user来判断的话是判断对象是否相同,用equals是判断值是否相同//这里要选择user还是直接输入数字都行String password=new String(jPasswordField.getPassword());//注意:jPasswordField.getPassword返回的并不是直接就是可读的密码内容,还需要建立string对象来才能看出来if (Objects.equals(textField.getText(), "")){JOptionPane.showMessageDialog(null,"账号不能为空");return;}if (Objects.equals(password, "")){JOptionPane.showMessageDialog(null,"密码不能为空");return;}String account=new String(textField.getText());ResultSet resultSet=null;resultSet=SelectDatabase(account);String accountant_match="";while(true){//异常:确保resultSet的next不会指空try {if (!resultSet.next()) break;} catch (SQLException throwables) {throwables.printStackTrace();}try {if(Objects.equals(account, resultSet.getString(1))) {accountant_match=account;break;}} catch (SQLException throwables) {throwables.printStackTrace();}}if (Objects.equals(accountant_match, "")) {JOptionPane.showMessageDialog(null,"账号不存在,请先注册");return;}if (checkAccountant(accountant_match,password)){JOptionPane.showMessageDialog(null,"登录成功");}elseJOptionPane.showMessageDialog(null,"密码错误,请重新输入");//                        if (!(Objects.equals(textField.getText(), "123")&&Objects.equals(password,"123"))){//                            //JOptionPane.showMessageDialog(null,"账号或者密码错误");//消息框
//                        }}});//创建注册框JButton jButton_register=new JButton("register");jButton_register.setBounds(200,130,80,25);panel.add(jButton_register);jButton_register.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {createRegisterFrame();}});}

注册界面的面板设置

private static void SetPlaceComponent_reg(JPanel panel_reg,JFrame frame){//少了这一行布局会出问题(自动布局,以下的布局操作就没用了)panel_reg.setLayout(null);frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {frame.dispose();}});//创建用户名和密码的labelJLabel label_user_reg=new JLabel("User");JLabel label_password_reg=new JLabel("password");label_user_reg.setBounds(100,50,65,25);label_password_reg.setBounds(100,100,65,25);panel_reg.add(label_user_reg);panel_reg.add(label_password_reg);//创建用户名输入行JTextField textField_reg=new JTextField();textField_reg.setBounds(200,50,150,25);panel_reg.add(textField_reg);textField_reg.addKeyListener(new KeyListener() {@Overridepublic void keyTyped(KeyEvent e) {if(KeyEvent.VK_SPACE==e.getKeyChar()){e.consume();}}@Overridepublic void keyPressed(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}});//创建密码输入行JPasswordField passwordField_reg=new JPasswordField();passwordField_reg.setBounds(200,100,150,25);panel_reg.add(passwordField_reg);//创建一个取消按钮JButton b_cancel=new JButton("取消");b_cancel.setBounds(350,200,100,25);panel_reg.add(b_cancel);b_cancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {frame.dispose();}});//创建一个注册按钮JButton b_reg=new JButton("注册");b_reg.setBounds(150,200,100,25);panel_reg.add(b_reg);b_reg.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (Objects.equals(textField_reg.getText(), "")){JOptionPane.showMessageDialog(null,"用户名别为空啊");return;}String password=new String(passwordField_reg.getPassword());if (Objects.equals(password,"")){JOptionPane.showMessageDialog(null,"密码别为空啊");return;}if(WriteDatabase(textField_reg.getText(), password)){JOptionPane.showMessageDialog(null,"注册成功");}}});}

设置框架

设置登录的框架

 private static void createLoginFrame() {//JFrame.setDefaultLookAndFeelDecorated(true); //设置窗口风格(但我感觉设置了反而更丑)JFrame frame = new JFrame("This is login window");  //创建一个标题为“this is……”的窗体对象frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //设置窗体的右上角状态(可关闭)frame.setSize(600,300);//设置窗体大小//创建一个面板,相当于一个div容器JPanel panel=new JPanel();frame.add(panel);       //把面板加入到框架中SetPlaceComponent(panel);    //调用函数//窗体可视化//frame.pack();  //窗口自适应大小,如果用了pack,那么setsize就没有效果frame.setVisible(true);   //设置窗体可视为真

设置注册框架

private static void createRegisterFrame(){JFrame frame_reg= new JFrame("this is register window");frame_reg.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame_reg.setSize(500,500);JPanel panel_reg=new JPanel();frame_reg.add(panel_reg);SetPlaceComponent_reg(panel_reg,frame_reg);frame_reg.setVisible(true);}

设置数据库

我直接写在了main方法里,这个地方还需要设置一个全局变量statement,当连接数据库成功之后,全局都可以通过这个变量来对数据库进行操作。

public static void main(String[] args) {//SwingUtilities这个是跟线程有关的String driverName="com.mysql.cj.jdbc.Driver";String dbURL="jdbc:mysql://localhost:3306?serverTimezone=UTC";String userName="root";String userPwd="3333333";try{Class.forName(driverName);System.out.println("加载驱动成功!");}catch(Exception e){e.printStackTrace();System.out.println("加载驱动失败!");}try{Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);System.out.println("连接数据库成功!");statement=dbConn.createStatement();statement.execute("use runoob");}catch(Exception e){e.printStackTrace();System.out.print("SQL Server连接失败!");}javax.swing.SwingUtilities.invokeLater(new Runnable() {public void run() {createLoginFrame();}});}

注册后账号密码写入数据库

private static boolean WriteDatabase(String user,String password){String sql=new String("insert into accountant_test (user,password) values (\"%s\",\"%s\")");//这个地方如果%s不加双引号,数据库写入会报错,string内有双引号要写、作转义sql=String.format(sql,user,password);try {statement.execute(sql);return true;} catch (SQLException throwables) {JOptionPane.showMessageDialog(null,"账号已经注册过了,请直接登录");}return false;}

登录时查询账号密码

checkAccountant在登录的panel中被调用

private static boolean checkAccountant(String u_accountant,String u_password){ResultSet resultSet=SelectDatabase(u_accountant);try {if (resultSet.next()) return Objects.equals(u_password, resultSet.getString(2));} catch (SQLException throwables) {throwables.printStackTrace();}return false;}
private static ResultSet SelectDatabase(String user) {String sql=new String("select * from accountant_test where user=\"%s\"");sql=String.format(sql,user);ResultSet resultSet = null;try {resultSet=statement.executeQuery(sql);} catch (SQLException throwables) {throwables.printStackTrace();}return resultSet;}

总的来说,基本功能就是能够注册登录,查、存数据(mysql)。数据库的配置也很简单,只需要两个varchar,一个账号一个密码,要把账号设成主键,因为密码可以重复但是账号不行。

用swing写个简单的登录器相关推荐

  1. 写一个简单的登录页面!!!(html)

    写一个简单的登录页面!!! 大家好,我是伍柒. 今天我又双叒叕发现了一个好东西. 那就是用html做一个登录页面 那,该如何做呢? 首先 现在html里的body里写 一个头部header标签(双标签 ...

  2. 小白教程——Windows下用PHP写一个简单的登录注册页面(二)

    哈喽,看到这里希望小伙伴们都把wampserver环境安装好了,如果还没有安装或创建数据表就移步去看我上一篇文章吧.OK~接下我们将进入代码实现部分,首先我们需要一个文本编辑器,可以是电脑自带的not ...

  3. 12.写一个简单的发布器与订阅器(C++)

    写一个简单的发布器与订阅器(C++)(rawmeat:http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)) 注意 ...

  4. ROS2学习笔记13--编写一个简单的发布器和侦听器(C++)

    概要:这篇主要介绍编写发布器和侦听器的简单套路(C++) 环境:ubuntu20.04,ros2-foxy,vscode 最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现. 2. ...

  5. 第8节 实例-写个简单的操作器

    缘由 应四川的群友:挑战高起点 的要求,我给大家写一个最简单的操作器,读完本文以最大程度让读者掌握在OSG中写个操作器是咋回事儿.代码在最后一个代码块,直接新建OSG工程,拷贝进去就可以运行.特别感谢 ...

  6. 利用cookie和jsp写一个简单的登录判断的网页,并获取上次的登录的时间。

    要求:因为只是简单制作,没必要连数据库,直接用确定值去判断.然后就是第一次登录的时候需要获取到登录的时间,然后在下次登录的时候将上次获取到的时间输出. 思路:首先第一个,第一次登录的jsp(姑且当做注 ...

  7. 简单的登录器(有登录、注册、查看、退出四种功能)

    import java.util.Scanner; public class driver {//自定义类名driver public static void main(String[] args) ...

  8. java swing实现的简单音乐播放器源码附带视频指导教程

    大家好,今天给大家演示一下由Java swing实现的一款简单的音乐播放器,该项目实现了添加音乐.播放音乐.暂停.停止,快退快进.歌词载入等功能,功能相对比较丰富,是Java初学者学习参考的很好资料, ...

  9. python写邮箱系统_教大家用Python写一个简单电子邮件发信器

    嘛~炎热的暑假大家都在家干些啥呢?up主本人每天就是摸鱼哒!为了让这个懒懒的up每天从床上早点爬起来,我可是立了不少flag呢~那就先不多说了,直接开始正文吧. 声明一下,本文内容为原创,如果引用其他 ...

  10. html5中音乐播放器怎么写,html5简单音乐播放器

    自己写的一个简单的音乐播放器, 主要实现了控制播放暂停,时间显示,音乐进度条点击以及拖动改变播放进度效果. 基于jquery编写,需要引入jquery. HTML: 00:00:00 00:00:00 ...

最新文章

  1. 百款APP嵌入 KeyMob移动广告聚合平台发布十周
  2. ASP.NET页面指令
  3. 430. 扁平化多级双向链表
  4. 统一并发 I——简介
  5. JSON Web Token(缩写 JWT) 目前最流行的跨域认证解决方案
  6. java properties null_正确使用Java Properties - Java综合 - Java - JavaEye...
  7. git clone错误
  8. 帝国CMS浅浅滴谈一下——博客园老牛大讲堂
  9. 利用IP纯真数据库查询地址
  10. 高通QCC蓝牙耳机提示音生成方法
  11. 串口服务器gsd文件,PROFIBUS总线通信仪表GSD文件的选择
  12. Java算法与数据结构、设计模式、高并发视频教程免费下载
  13. css 伪类 :fullscreen 应用于当前处于全屏显示模式的元素。
  14. 怎样提高数据库查询效率
  15. UML实例(五):在线购物系统设计类图
  16. 计算机科学与工程学院彭骜宇,公派留学联合培养博士生项目校内评审答辩安排...
  17. Query Planning(查询方案)(搜索一)
  18. IDEA断点无效(干货)
  19. blur和GaussianBlur
  20. 程序员之路:Linux目录处理命令_彭世瑜_新浪博客

热门文章

  1. docker语句及SQL查询
  2. 书架html特效代码,原生JS写的一个书架式的图片缩放滚动展示特效代码
  3. Wifi测速上下行不一致
  4. 张成分析(spanning test):portfolio_analysis.Spanning_test
  5. 一篇通读网贷产品的身份核验设计
  6. 使用主题背景编辑器设计应用主题背景
  7. 【网络特效】12 个炫酷背景特效库
  8. VMware14下载安装ubuntu14.04.6(VMware系列二)
  9. 思科2960-S交换机初始化配置
  10. shell学习笔记:变量篇