天天看点

Java-基于GUI的用户注册模块(Swing、JFrame)前言一、题目二、效果三、代码

文章目录

  • 前言
  • 一、题目
  • 二、效果
  • 三、代码

前言

之前有学使用

add

方法来放置组件,但是那种方式我不大喜欢,还是绝对位置放置的方法比较熟悉。

此篇文章主要是分享一下题目的做法,可以参考借鉴,但不一定是最佳解,不对具体原理介绍。

我是采用的是第二种,通过

文件

的方式存储用户数据,一行中存储用户名和密码,并以空格隔开。

在进行设计的时候我是把GUI设计放在最后去弄,先解决的是文件的写入、文件的读取、MD5的转换。加上查阅资料的时间大概花了2个小时多。

使用的环境是

IDEA

,没有使用

JFrom

或者是

Eclipse

环境的

WindowBuilder

,感觉直接通过代码来写的话印象会更深,这次的收获还是蛮多的。

一、题目

Java-基于GUI的用户注册模块(Swing、JFrame)前言一、题目二、效果三、代码

二、效果

Java-基于GUI的用户注册模块(Swing、JFrame)前言一、题目二、效果三、代码
Java-基于GUI的用户注册模块(Swing、JFrame)前言一、题目二、效果三、代码
Java-基于GUI的用户注册模块(Swing、JFrame)前言一、题目二、效果三、代码
Java-基于GUI的用户注册模块(Swing、JFrame)前言一、题目二、效果三、代码

三、代码

  • 我设置的

    data.txt

    文件是位于

    src

    包下,你可以根据自己的情况修改文件名或路径。
/**作者:小狐狸FM*/
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.math.BigInteger;
import java.security.MessageDigest;

public class Main extends JFrame {
    JTextField show_name = new JTextField("姓名");
    JTextField show_pwd = new JTextField("密码");
    JTextField msg = new JTextField();//提示信息
    JTextField name = new JTextField();//姓名
    JPasswordField pwd = new JPasswordField();//密码
    JButton submit = new JButton("注册");
    JButton reset = new JButton("重置");
    public static void main(String args[]){//主函数
        new Main();
    }
    public Main(){//构造方法
        super("用户注册界面");
        setSize(300,300);
        setLayout(null);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //文本
        show_name.setLocation(50,50);
        show_name.setSize(50,20);
        show_name.setEditable(false);
        show_name.setBorder(BorderFactory.createEmptyBorder());//消除文本周围的框线
        show_pwd.setLocation(50,100);
        show_pwd.setSize(50,20);
        show_pwd.setEditable(false);
        show_pwd.setBorder(BorderFactory.createEmptyBorder());//消除文本周围的框线
        //输入框
        name.setLocation(100,50);
        name.setSize(150,20);
        pwd.setLocation(100,100);
        pwd.setSize(150,20);
        //按钮
        submit.setLocation(50,150);
        submit.setSize(80,20);
        reset.setLocation(150,150);
        reset.setSize(80,20);
        //事件
        submit.addActionListener(new ActionListener() {//注册按钮
            @Override
            public void actionPerformed(ActionEvent e) {
                //获取输入框参数
                String tmp_name = name.getText();
                String tmp_pwd = pwd.getText();
                if(check_same(tmp_name)){//若该用户名在文件时
                    msg.setText("该用户已存在,添加失败");//提示信息
                }else if(tmp_name.equals("")){//若用户名为空时
                    msg.setText("请填写用户名!");
                }else if(tmp_pwd.equals("")){//若密码为空时
                    msg.setText("请填写密码");
                }else{
                    input(tmp_name,tmp_pwd);
                    msg.setText("添加成功!");//提示信息
                }
                //文本
                msg.setSize(300,20);
                msg.setLocation(100,200);
                msg.setBorder(BorderFactory.createEmptyBorder());//消除文本周围的框线
                msg.setEditable(false);
                //添加
                add(msg);
            }
        });
        reset.addActionListener(new ActionListener() {//重置按钮
            @Override
            public void actionPerformed(ActionEvent e) {
                name.setText("");
                pwd.setText("");
            }
        });
        //添加
        add(show_name);
        add(show_pwd);
        add(name);
        add(pwd);
        add(submit);
        add(reset);
    }
    public static boolean check_same(String name){//检测该用户名是否已经存在文件中,逐行读取
       try{
            File file = new File("src/data.txt");
            BufferedReader reader = new BufferedReader(new FileReader(file));
            while(true){
                String line = reader.readLine();//当前行信息
                if(line==null){//读入null时结束
                    break;
                }
                String[] str = line.split(" ");//获取姓名和密码存入字符串数组
                if(str[0].equals(name)){//找到第一个与传入的参数姓名相同时
                    return true;
                }
            }
       }catch(Exception e){
            e.printStackTrace();
        }
       return false;
    }
    public static String md5(String pwd){//对密码进行MD5加密,返回加密结果
        byte[] d = null;
        String c = "";
        try{
            MessageDigest m = MessageDigest.getInstance("md5");
            d = m.digest(pwd.getBytes("utf-8"));
            c = new BigInteger(1,d).toString(16);
        }catch(Exception e){
            e.printStackTrace();
        }
        return c;
    }
    public static void input(String name,String pwd){//在文件末尾添加新的用户名密码信息
        try{
            File file = new File("src/data.txt");
            FileOutputStream fos = new FileOutputStream(file,true);//true表示以追加方式
            String line = name + " " + md5(pwd) + "\n";//设置存入的格式
            fos.write(line.getBytes("utf-8"));//转换成文本对应的编码方式
        }catch(Exception e){
            e.printStackTrace();
        }

    }
}