用java使用对象输入/输出流完成用户注册登录界面,User类(用户名,密码)保存在工程文件夹下res\password.txt中 。(仿P204-例题10-12),使用消息框给出相关信息
时间: 2024-03-11 20:50:41 浏览: 29
好的,我可以帮你解答这个问题。
首先,你需要创建一个 `User` 类,包含用户名和密码两个属性,并实现 `Serializable` 接口,以便使用对象输入/输出流进行序列化和反序列化。
```java
import java.io.Serializable;
public class User implements Serializable {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
```
接下来,你需要创建一个注册登录界面,包含用户名和密码的输入框,并在点击注册或登录按钮时将输入的用户名和密码保存为 `User` 对象并写入到 `res\password.txt` 文件中,或从文件中读取 `User` 对象并验证用户名和密码是否正确。
```java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class LoginFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField usernameField;
private JPasswordField passwordField;
public LoginFrame() {
setTitle("用户登录");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 150));
JPanel panel = new JPanel(new BorderLayout());
panel.add(createInputPanel(), BorderLayout.CENTER);
panel.add(createButtonPanel(), BorderLayout.SOUTH);
setContentPane(panel);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private JPanel createInputPanel() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JLabel usernameLabel = new JLabel("用户名:");
usernameField = new JTextField(20);
panel.add(usernameLabel);
panel.add(usernameField);
JLabel passwordLabel = new JLabel("密 码:");
passwordField = new JPasswordField(20);
panel.add(passwordLabel);
panel.add(passwordField);
return panel;
}
private JPanel createButtonPanel() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
JButton registerButton = new JButton("注册");
registerButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
if (username.isEmpty() || password.isEmpty()) {
JOptionPane.showMessageDialog(LoginFrame.this, "用户名和密码不能为空!");
return;
}
User user = new User(username, password);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("res/password.txt"))){
oos.writeObject(user);
JOptionPane.showMessageDialog(LoginFrame.this, "注册成功!");
} catch (Exception ex) {
JOptionPane.showMessageDialog(LoginFrame.this, ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
});
JButton loginButton = new JButton("登录");
loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = new String(passwordField.getPassword());
if (username.isEmpty() || password.isEmpty()) {
JOptionPane.showMessageDialog(LoginFrame.this, "用户名和密码不能为空!");
return;
}
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("res/password.txt"))){
User user = (User) ois.readObject();
if (username.equals(user.getUsername()) && password.equals(user.getPassword())) {
JOptionPane.showMessageDialog(LoginFrame.this, "登录成功!");
} else {
JOptionPane.showMessageDialog(LoginFrame.this, "用户名或密码错误!", "错误", JOptionPane.ERROR_MESSAGE);
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(LoginFrame.this, ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
}
}
});
panel.add(registerButton);
panel.add(loginButton);
return panel;
}
public static void main(String[] args) {
new LoginFrame();
}
}
```
在这个界面中,我们创建了两个按钮,一个是注册按钮,另一个是登录按钮。当用户点击注册按钮时,我们从输入框中获取用户名和密码,创建一个 `User` 对象并写入到 `res\password.txt` 文件中;当用户点击登录按钮时,我们从文件中读取 `User` 对象并验证用户名和密码是否正确,如果正确则弹出消息框提示登录成功,否则弹出消息框提示用户名或密码错误。
在上面的代码中,我们使用了 `ObjectOutputStream` 和 `ObjectInputStream` 对象输出和输入流来进行对象的序列化和反序列化,并使用 `JOptionPane` 类来弹出消息框提示相关信息。
希望这个例子对你有所帮助!