提交之GitHub

This commit is contained in:
2026-02-08 23:58:00 +08:00
commit b4f25e99b1
43 changed files with 7926 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
package client.view;
import client.Client;
import client.service.ChatSender;
import client.service.LocalData;
import client.view.login.*;
import client.view.util.DesignToken;
import server.serveice.Wrapper;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* 登录页面,用于完成用户账户登录的功能,作为一个独立的页面,登录完成之后将自动关闭,并开启主界面
*/
public class LoginPage extends JFrame {
private static volatile LoginPage INSTANCE;
// 获取登录页面实例,使用单例模式确保全局唯一性
public static LoginPage get() {
if (INSTANCE == null) {
synchronized (LoginPage.class) {
if (INSTANCE == null) {
INSTANCE = new LoginPage();
}
}
}
return INSTANCE;
}
// 交替展示两个窗口,分别用于进行注册和登录操作。
private SignInView signInView;
private SignUpView signUpView;
private LoginPage() {
setTitle("欢迎来到本地网聊天室!");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(DesignToken.LOGIN_WIDTH, DesignToken.LOGIN_HEIGHT);
setLocationRelativeTo(null);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// 如果链接上了,发出退出信息
if (Client.isConnected()) {
ChatSender.addMsg(Wrapper.logoutRequest(LocalData.get().getId()));
}
super.windowClosing(e);
// 如果未登录,则直接退出。
if (LocalData.get().getId().length() == 0) {
System.exit(0);
}
}
});
signInView = new SignInView(this);
signUpView = new SignUpView(this);
// 默认为登录
exchangeToSignInView();
}
// 更换到注册界面
public void exchangeToSignUpView() {
this.remove(signInView);
this.add(signUpView, BorderLayout.CENTER);
this.validate();
this.repaint();
}
// 更换到登录界面
public void exchangeToSignInView() {
this.remove(signUpView);
this.add(signInView, BorderLayout.CENTER);
this.validate();
this.repaint();
}
// 打开主界面,并关闭本界面
public void openMainPage() {
// 创建新窗口
MainPage.get().setVisible(true);
// 关闭当前窗口
this.dispose();
}
public void showMsgDialog(String text) {
JDialog inviteDialog = new JDialog(this, "信息", true);
inviteDialog.setSize(300, 200);
inviteDialog.setLocationRelativeTo(this);
// 设置对话框内容
String htmlText = "<html><body style='width: 210px; padding: 10px;'>" + text + "</body></html>";
JLabel label = new JLabel(htmlText, SwingConstants.CENTER);
JButton closeBtn = new JButton("确定");
closeBtn.addActionListener(e -> inviteDialog.dispose());
JPanel panel = new JPanel(new BorderLayout());
JPanel centerPanel = new JPanel(new FlowLayout());
centerPanel.add(label);
panel.add(centerPanel, BorderLayout.CENTER);
panel.add(closeBtn, BorderLayout.SOUTH);
inviteDialog.add(panel);
// 显示对话框(会阻塞主窗口交互)
inviteDialog.setVisible(true);
}
}