📄 login.java
字号:
import java.awt.BorderLayout;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JPasswordField;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InvalidClassException;
import java.io.NotSerializableException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import javax.swing.KeyStroke;
import javax.swing.JComponent;
import javax.swing.UIManager;
// 定义用户登录类Login,生成用户登录界面
public class Login extends JFrame {
// 声明变量,并赋初值
private JPanel jContentPane = null;
private JLabel iconLabel1 = null;
private JLabel backgroundLabel = null;
private JLabel user_nameLabel = null;
private JLabel passwordLabel = null;
private JTextField user_nameTextField = null;
private JPasswordField jPasswordField = null;
private JButton loginButton = null;
private JButton registerButton = null;
private JButton findpwButton = null;
static String windowsClassName = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
Socket toServer;
private JTextField getUser_nameTextField() {
if (user_nameTextField == null) {
user_nameTextField = new JTextField();
user_nameTextField.setLocation(new java.awt.Point(103,96));
user_nameTextField.setToolTipText("");
user_nameTextField.setSize(new java.awt.Dimension(144,25));
}
return user_nameTextField;
}
private JPasswordField getJPasswordField() {
if (jPasswordField == null) {
jPasswordField = new JPasswordField();
jPasswordField.setLocation(new java.awt.Point(103,129));
jPasswordField.setToolTipText("");
jPasswordField.setSize(new java.awt.Dimension(144,25));
}
return jPasswordField;
}
private JButton getLoginButton() {
if (loginButton == null) {
loginButton = new JButton();
loginButton.setBackground(new java.awt.Color(226,208,241));
loginButton.setLocation(new java.awt.Point(255,98));
loginButton.setSize(new java.awt.Dimension(72,53));
loginButton.setForeground(new java.awt.Color(0,102,255));
loginButton.setFont(new java.awt.Font("楷体_GB2312", java.awt.Font.BOLD, 14));
loginButton.setToolTipText("进入聊天室 (Enter)");
loginButton.setText("登录");
loginButton.addActionListener(new LoginListener());
loginButton.registerKeyboardAction(new LoginListener(),
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),
JComponent.WHEN_IN_FOCUSED_WINDOW);
}
return loginButton;
}
private JButton getRegisterButton() {
if (registerButton == null) {
registerButton = new JButton();
registerButton.setLocation(new java.awt.Point(32,165));
registerButton.setText("注册新用户");
registerButton.setBackground(new java.awt.Color(222,232,159));
registerButton.setFont(new java.awt.Font("細明體", java.awt.Font.BOLD, 12));
registerButton.setToolTipText("注册新用户");
registerButton.setSize(new java.awt.Dimension(138,27));
registerButton.addActionListener(new RegisterListener());
}
return registerButton;
}
private JButton getFindpwButton() {
if (findpwButton == null) {
findpwButton = new JButton();
findpwButton.setText("找回密码");
findpwButton.setSize(new java.awt.Dimension(138,27));
findpwButton.setBackground(new java.awt.Color(221,234,159));
findpwButton.setFont(new java.awt.Font("細明體", java.awt.Font.BOLD, 12));
findpwButton.setToolTipText("找回密码");
findpwButton.setIcon(new ImageIcon(getClass().getResource("/pictures/ask.gif")));
findpwButton.setLocation(new java.awt.Point(189,164));
findpwButton.addActionListener(new FindPwListener());
}
return findpwButton;
}
// 定义主函数main()
public static void main(String[] args)
{
new Login();
}
// 定义构造函数
public Login()
{
super();
try
{
UIManager.setLookAndFeel(windowsClassName);
}
catch (Exception exc)
{
System.err.println("Error loading L&F: " + exc);
}
initialize();
}
// 定义初始化函数
private void initialize() {
this.setSize(366, 245);
this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/pictures/logo1.jpg")));
this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
this.setResizable(false);
this.setName("LoginFrame");
this.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12));
this.setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
this.setBackground(new java.awt.Color(204,204,255));
this.setContentPane(getJContentPane());
this.setTitle("Fetion用户登录");
this.setLocationRelativeTo(null);
this.setVisible(true);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
passwordLabel = new JLabel();
passwordLabel.setText("密 码:");
passwordLabel.setSize(new java.awt.Dimension(64,24));
passwordLabel.setFont(new java.awt.Font("黑体", java.awt.Font.BOLD, 14));
passwordLabel.setForeground(new java.awt.Color(102,0,102));
passwordLabel.setLocation(new java.awt.Point(33,129));
user_nameLabel = new JLabel();
user_nameLabel.setText("用户名:");
user_nameLabel.setSize(new java.awt.Dimension(65,24));
user_nameLabel.setFont(new java.awt.Font("黑体", java.awt.Font.BOLD, 14));
user_nameLabel.setForeground(new java.awt.Color(102,0,51));
user_nameLabel.setLocation(new java.awt.Point(33,95));
backgroundLabel = new JLabel();
backgroundLabel.setEnabled(false);
backgroundLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204,204,255),5));
backgroundLabel.setLocation(new java.awt.Point(11,76));
backgroundLabel.setSize(new java.awt.Dimension(336,131));
backgroundLabel.setText("");
iconLabel1 = new JLabel();
iconLabel1.setBounds(new java.awt.Rectangle(10,9,336,56));
iconLabel1.setIcon(new ImageIcon(getClass().getResource("/pictures/rongshuxia.jpg")));
iconLabel1.setToolTipText("欢迎使用飞信聊天!");
iconLabel1.setText("");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.setBackground(new java.awt.Color(242,231,241));
jContentPane.setForeground(java.awt.Color.pink);
jContentPane.add(iconLabel1, null);
jContentPane.add(backgroundLabel, null);
jContentPane.add(user_nameLabel, null);
jContentPane.add(passwordLabel, null);
jContentPane.add(getUser_nameTextField(), null);
jContentPane.add(getJPasswordField(), null);
jContentPane.add(getLoginButton(), null);
jContentPane.add(getRegisterButton(), null);
jContentPane.add(getFindpwButton(), null);
}
return jContentPane;
}
// 用户自定义类和函数
// 定义"登录"按钮监听器
class LoginListener implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource() == loginButton)
{
// msgFromServer用来存储从服务器返回的信息
String msgFromServer = "";
// 调用CheckInfo()检测用户信息
String msgFromCheck = (String)checkInfo();
// 如果通过检测,则连接服务器,发送套接字给服务器
if(msgFromCheck.compareTo("") == 0)
{
// toServerData用来存储发送到服务器的信息
TransData toServerData = new TransData();
LoginInfo data = (LoginInfo)getUserInfo();
toServerData.flag = TProtocal.LOGIN_INFO;
toServerData.dataObj = (LoginInfo)data;
try
{
// 创建套接字,连接服务器
toServer = new Socket(ServerIP.ADDRESS,ServerIP.PORT);
// 创建输出流,将接受的用户注册信息发送到服务器
ObjectOutputStream streamToServer = new ObjectOutputStream(toServer.getOutputStream());
streamToServer.writeObject((TransData)toServerData);
// 创建输入流,接收服务器的返回消息
BufferedReader streamFromServer = new BufferedReader(new InputStreamReader(toServer.getInputStream()));
msgFromServer = (String)streamFromServer.readLine();
// 关闭数据流
streamToServer.close();
streamFromServer.close();
}
catch(InvalidClassException e)
{
System.out.println("无效类LoginInfo" + e);
return;
}
catch(NotSerializableException e)
{
System.out.println("对象未序列化" + e);
return;
}
catch(IOException e)
{
System.out.println("传输用户登录信息到服务器失败");
//e.printStackTrace();
JOptionPane.showMessageDialog(loginButton,"连接服务器失败!");
return;
}
if(msgFromServer.compareTo("Login") == 0)
{
new Thread(new ChatClient(data.cUserID));
dispose();
}
else
{
try
{
toServer.close();
}
catch(IOException e)
{
System.out.println("关闭数据流失败!" + e);
}
if(msgFromServer.compareTo("hasLogin") == 0)
{
user_nameTextField.setText("");
jPasswordField.setText("");
JOptionPane.showMessageDialog(loginButton,"此用户已经登录!");
}
if(msgFromServer.compareTo("PwError") == 0)
{
jPasswordField.setText("");
JOptionPane.showMessageDialog(loginButton,"密码错误,请重新输入!");
}
if(msgFromServer.compareTo("NotRegister") == 0)
{
user_nameTextField.setText("");
jPasswordField.setText("");
JOptionPane.showMessageDialog(loginButton,"此用户名尚未注册,请先注册!");
}
}
}
else
{
JOptionPane.showMessageDialog(loginButton,msgFromCheck);
}
}
}
}
// 定义"注册"按钮监听器
class RegisterListener implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
new Register();
}
}
// 定义getUserInfo()函数,用来从登录界面获取输入信息
public LoginInfo getUserInfo()
{
LoginInfo temp = new LoginInfo();
temp.cUserID = user_nameTextField.getText().trim();
temp.cPassword = String.valueOf(jPasswordField.getPassword());
return temp;
}
// 定义checkInfo()函数,在客户端对输入的注册信息进行检测
public String checkInfo()
{
String msgReturn = "";
LoginInfo data = (LoginInfo)getUserInfo();
if(data.cUserID.compareTo("") == 0 || data.cPassword.compareTo("") == 0)
{
msgReturn = "用户名和密码不能为空!";
}
return msgReturn;
}
// 定义"忘记密码"按钮监听器
class FindPwListener implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
new PwFinder(); // 启动密码提示界面
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -