java swing语言 登录注册界面 MVC架构,json格式储存,代码
时间: 2024-03-23 21:40:54 浏览: 18
以下是一个简单的 Java Swing 登录注册界面的 MVC 架构代码,并且使用 JSON 格式进行数据储存。
首先,我们需要创建一个 User 类来表示用户信息:
```java
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;
}
}
```
接下来,我们需要创建一个 UserDao 接口,来规定用户信息的 CRUD 操作:
```java
public interface UserDao {
boolean createUser(User user);
User readUser(String username);
boolean updateUser(User user);
boolean deleteUser(String username);
}
```
然后,我们需要创建一个 UserDaoImpl 类,来实现 UserDao 接口,并且使用 JSON 格式进行数据储存:
```java
public class UserDaoImpl implements UserDao {
private final String fileName = "users.json";
private final Gson gson = new Gson();
@Override
public boolean createUser(User user) {
List<User> users = readUsers();
for (User u : users) {
if (u.getUsername().equals(user.getUsername())) {
return false;
}
}
users.add(user);
writeUsers(users);
return true;
}
@Override
public User readUser(String username) {
List<User> users = readUsers();
for (User user : users) {
if (user.getUsername().equals(username)) {
return user;
}
}
return null;
}
@Override
public boolean updateUser(User user) {
List<User> users = readUsers();
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUsername().equals(user.getUsername())) {
users.set(i, user);
writeUsers(users);
return true;
}
}
return false;
}
@Override
public boolean deleteUser(String username) {
List<User> users = readUsers();
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getUsername().equals(username)) {
users.remove(i);
writeUsers(users);
return true;
}
}
return false;
}
private List<User> readUsers() {
try (Reader reader = new FileReader(fileName)) {
Type type = new TypeToken<List<User>>(){}.getType();
return gson.fromJson(reader, type);
} catch (IOException e) {
return new ArrayList<>();
}
}
private void writeUsers(List<User> users) {
try (Writer writer = new FileWriter(fileName)) {
gson.toJson(users, writer);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
接下来,我们需要创建一个 LoginView 类,来表示登录界面:
```java
public class LoginView extends JFrame {
private final JLabel lblUsername = new JLabel("Username:");
private final JTextField txtUsername = new JTextField(20);
private final JLabel lblPassword = new JLabel("Password:");
private final JPasswordField txtPassword = new JPasswordField(20);
private final JButton btnLogin = new JButton("Login");
private final JButton btnRegister = new JButton("Register");
private final LoginController loginController;
public LoginView(LoginController loginController) {
super("Login");
this.loginController = loginController;
JPanel panel = new JPanel(new GridLayout(3, 2));
panel.add(lblUsername);
panel.add(txtUsername);
panel.add(lblPassword);
panel.add(txtPassword);
panel.add(btnLogin);
panel.add(btnRegister);
btnLogin.addActionListener(e -> {
String username = txtUsername.getText();
String password = new String(txtPassword.getPassword());
loginController.login(username, password);
});
btnRegister.addActionListener(e -> {
String username = txtUsername.getText();
String password = new String(txtPassword.getPassword());
loginController.register(username, password);
});
add(panel);
pack();
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
```
然后,我们需要创建一个 RegisterView 类,来表示注册界面:
```java
public class RegisterView extends JFrame {
private final JLabel lblUsername = new JLabel("Username:");
private final JTextField txtUsername = new JTextField(20);
private final JLabel lblPassword = new JLabel("Password:");
private final JPasswordField txtPassword = new JPasswordField(20);
private final JButton btnRegister = new JButton("Register");
private final RegisterController registerController;
public RegisterView(RegisterController registerController) {
super("Register");
this.registerController = registerController;
JPanel panel = new JPanel(new GridLayout(2, 2));
panel.add(lblUsername);
panel.add(txtUsername);
panel.add(lblPassword);
panel.add(txtPassword);
panel.add(btnRegister);
btnRegister.addActionListener(e -> {
String username = txtUsername.getText();
String password = new String(txtPassword.getPassword());
registerController.register(username, password);
});
add(panel);
pack();
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
}
```
接下来,我们需要创建一个 LoginController 类,来控制登录流程:
```java
public class LoginController {
private final UserDao userDao = new UserDaoImpl();
private final LoginView loginView;
public LoginController(LoginView loginView) {
this.loginView = loginView;
}
public void login(String username, String password) {
User user = userDao.readUser(username);
if (user != null && user.getPassword().equals(password)) {
JOptionPane.showMessageDialog(loginView, "Login successful!");
} else {
JOptionPane.showMessageDialog(loginView, "Invalid username or password!");
}
}
public void register(String username, String password) {
boolean result = userDao.createUser(new User(username, password));
if (result) {
JOptionPane.showMessageDialog(loginView, "Register successful!");
} else {
JOptionPane.showMessageDialog(loginView, "Username already exists!");
}
}
}
```
最后,我们需要创建一个 RegisterController 类,来控制注册流程:
```java
public class RegisterController {
private final UserDao userDao = new UserDaoImpl();
private final RegisterView registerView;
public RegisterController(RegisterView registerView) {
this.registerView = registerView;
}
public void register(String username, String password) {
boolean result = userDao.createUser(new User(username, password));
if (result) {
JOptionPane.showMessageDialog(registerView, "Register successful!");
registerView.dispose();
} else {
JOptionPane.showMessageDialog(registerView, "Username already exists!");
}
}
}
```
现在,我们可以在主函数中创建登录界面和注册界面,并且将它们与对应的控制器进行绑定:
```java
public class Main {
public static void main(String[] args) {
LoginView loginView = new LoginView(new LoginController(loginView));
RegisterView registerView = new RegisterView(new RegisterController(registerView));
}
}
```
这样,我们就完成了一个简单的 Java Swing 登录注册界面的 MVC 架构,并且使用 JSON 格式进行数据储存。