用java Swing写一个登录注册界面,使用MVC架构,操作数据以json形式储存
时间: 2024-03-18 21:42:38 浏览: 14
好的,我可以为您提供一个基本的登录注册界面的代码框架,使用MVC架构,数据以JSON形式储存。以下是代码:
Model类:
```
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class User {
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;
}
public static User fromJson(String json) {
// 将 JSON 字符串转换成 User 对象
return new Gson().fromJson(json, User.class);
}
public String toJson() {
// 将 User 对象转换成 JSON 字符串
return new Gson().toJson(this);
}
public static List<User> getUsers() {
// 从文件中读取所有用户数据
String json = FileUtil.readFromFile("users.json");
if (json == null) {
return new ArrayList<>();
}
Type listType = new TypeToken<ArrayList<User>>(){}.getType();
return new Gson().fromJson(json, listType);
}
public static void saveUsers(List<User> users) {
// 将所有用户数据保存到文件中
String json = new Gson().toJson(users);
FileUtil.writeToFile("users.json", json);
}
public static User getUserByUsername(String username) {
// 根据用户名查找用户
List<User> users = getUsers();
List<User> filteredUsers = users.stream()
.filter(user -> user.getUsername().equals(username))
.collect(Collectors.toList());
if (filteredUsers.isEmpty()) {
return null;
}
return filteredUsers.get(0);
}
}
```
View类:
```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class LoginView extends JFrame {
private JTextField usernameField;
private JPasswordField passwordField;
private JButton loginButton;
private JButton registerButton;
public LoginView() {
setTitle("Login");
setSize(300, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(3, 2));
panel.add(new JLabel("Username:"));
usernameField = new JTextField();
panel.add(usernameField);
panel.add(new JLabel("Password:"));
passwordField = new JPasswordField();
panel.add(passwordField);
loginButton = new JButton("Login");
panel.add(loginButton);
registerButton = new JButton("Register");
panel.add(registerButton);
add(panel);
setLocationRelativeTo(null);
setVisible(true);
}
public String getUsername() {
return usernameField.getText();
}
public String getPassword() {
return new String(passwordField.getPassword());
}
public void showError(String message) {
JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
}
public void addLoginListener(ActionListener listener) {
loginButton.addActionListener(listener);
}
public void addRegisterListener(ActionListener listener) {
registerButton.addActionListener(listener);
}
}
```
Controller类:
```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
public class LoginController {
private LoginView view;
public LoginController(LoginView view) {
this.view = view;
view.addLoginListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = view.getUsername();
String password = view.getPassword();
User user = User.getUserByUsername(username);
if (user == null) {
view.showError("Invalid username or password!");
return;
}
if (!user.getPassword().equals(password)) {
view.showError("Invalid username or password!");
return;
}
JOptionPane.showMessageDialog(view, "Login succeeded!");
}
});
view.addRegisterListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = view.getUsername();
String password = view.getPassword();
User user = User.getUserByUsername(username);
if (user != null) {
view.showError("Username already exists!");
return;
}
List<User> users = User.getUsers();
users.add(new User(username, password));
User.saveUsers(users);
JOptionPane.showMessageDialog(view, "Registration succeeded!");
}
});
}
}
```
启动类:
```
public class Main {
public static void main(String[] args) {
LoginView view = new LoginView();
LoginController controller = new LoginController(view);
}
}
```
注意:这个示例代码只提供了一个基本的登录注册界面,还需要您自己进行完善和优化。同时,还需要自己实现文件操作的FileUtil工具类。