文章目录
- 前言
- 一、题目
- 二、效果
- 三、代码
前言
之前有学使用
add
方法来放置组件,但是那种方式我不大喜欢,还是绝对位置放置的方法比较熟悉。
此篇文章主要是分享一下题目的做法,可以参考借鉴,但不一定是最佳解,不对具体原理介绍。
我是采用的是第二种,通过
的方式存储用户数据,一行中存储用户名和密码,并以空格隔开。
文件
在进行设计的时候我是把GUI设计放在最后去弄,先解决的是文件的写入、文件的读取、MD5的转换。加上查阅资料的时间大概花了2个小时多。
使用的环境是
,没有使用
IDEA
或者是
JFrom
环境的
Eclipse
,感觉直接通过代码来写的话印象会更深,这次的收获还是蛮多的。
WindowBuilder
一、题目
二、效果
三、代码
- 我设置的
文件是位于
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();
}
}
}