Java中登录页面 记住密码

来源:互联网 发布:linux ntp配置文件 编辑:程序博客网 时间:2024/06/11 15:37
  Java中登录页面 记住密码

public class Login extends JFrame implements ActionListener {

private JLabel username = new JLabel(“用 户 名:”);
private JLabel password = new JLabel(“密 码:”);
private Tpanel pane = new Tpanel(“pic/Login.png”);
private JButton ok = new JButton(“登录”);
private JButton cancel = new JButton(“取消”);
private JTextField usernametext = new JTextField(8);
private JPasswordField passwordtext = new JPasswordField(8);
private JCheckBox check = new JCheckBox();
private OutputStreamWriter writer = null;
private InputStreamReader reader = null;
private File user=null;

public Login() {

//打开user文本,用来记录用户名和密码
user = new File(“date/user.txt”);
if(!user.exists()){
try {
user.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
pwdRemember();

// 添加监听
ok.addActionListener(this);
cancel.addActionListener(this);
pane.setLayout(null);
username.setBounds(110,110, 80, 22);
usernametext.setBounds(180, 110, 100, 22);
password.setBounds(110,138, 80, 22);
passwordtext.setBounds(180,138, 100, 22);
ok.setBounds(118,175, 70, 25);
cancel.setBounds(198,175, 70, 25);
check.setBounds(210,210,110,25);
check.setText(“记住密码”);

this.add(check);
this.add(username);
this.add(password);
this.add(pane);
this.add(ok);
this.add(cancel);
this.add(usernametext);
this.add(passwordtext);
this.getRootPane().setDefaultButton(ok);

// 设置框体结构
this.add(pane);
this.setTitle(“登录系统”);
this.setSize(369, 290);
this.setLocation(500, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
}

public void sql() {

FundSocket t = new FundSocket(“select * from worker where username = ‘”
+ usernametext.getText()+”’ AND password = ‘”
+ passwordtext.getText() + “’”);
Object s[] =t.socketOpen();

try {
if (s.length!=0) {
String puil = usernametext.getText().substring(2, 3); // 获取用户的权限
FundFrame.getInstance(s[0].toString(),s[1].toString(), puil); // 打开主页面
this.setVisible(false); // 将登陆窗口隐藏

} else { JOptionPane.showMessageDialog(this, "请输入正确的用户名和密码"); passwordtext.setText(null);}

} catch (Exception e) {
e.getStackTrace();
}

//判断是否记住密码
if(check.isSelected()&&usernametext.getText().length()!=0&&passwordtext.getText().length()!=0){
try {
writer = new OutputStreamWriter(new FileOutputStream(“date/user.txt”));
writer.write(“remember:true:username:”+usernametext.getText()+”:password:”+passwordtext.getText()+”\n”);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
else if(usernametext.getText().length()!=0&&passwordtext.getText().length()!=0) {
try {
writer = new OutputStreamWriter(new FileOutputStream(“date/user.txt”));
writer.write(“remember:false:username:”+usernametext.getText()+”:password:”+passwordtext.getText()+”\n”);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

//记住密码
public void pwdRemember(){

try {
reader = new InputStreamReader(new FileInputStream(user));
BufferedReader in = new BufferedReader(reader);
String url=null;
String a[]= new String[6];
if(user.length()==0){ //如果文本中没有记录
writer = new OutputStreamWriter(new FileOutputStream(user,true));
writer.write(“remember:false\n”);
writer.close();
}
else {
url=in.readLine().trim();
a=url.split(“:”);
if(a[1].trim().equals(“true”)){
check.setSelected(true);
usernametext.setText(a[3]);
passwordtext.setText(a[5]);
}
}
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

public void actionPerformed(ActionEvent e) {
Object s = e.getSource();
if (s == ok) {
sql();
} else if (s == cancel) {
System.exit(0);
}

}
}

注意事项:

1、判断文本的大小可以采用 user.length() ==0 的方法来判断,也就是看文本的大小是否为0;

2、输入输出流要记得close(),不然的话 会出现文本框里面的内容为空的现象;

3、readLine()方法 获取到的文本最好 赋值给其他变量,不要直接用它来当变量,容易出错,因为一用完就要close();

4、注意 读、写语句的位置~!。在默认的情况下 writer = new OutputStreamWriter(new FileOutputStream(user));
会将之前写入到文本的内容覆盖掉, writer = new OutputStreamWriter(new FileOutputStream(user,true)); 当在里面添加一true 时 则不将内容覆盖!。 因此 读写的位置挺关键的,往往要读数据的时候会出现无法读到数据的情况,那就是因为之前数据在定义覆盖的时候已经被清空了,所以无法读到数据。

0 0
原创粉丝点击