📄 login.java
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class Login extends JFrame implements ActionListener {
private static final long serialVersionUID = -8965773902056088264L;
private JPanel pnlLogin;
private JButton btnLogin, btnRegister, btnExit;
private JLabel lblUserName, lblPassword, lblLogo;
private JTextField txtUserName;
private String serverIP = "localhost";
private JPasswordField pwdPassword;
// 用于将窗口定位
private Dimension scrnsize;
private Toolkit toolkit = Toolkit.getDefaultToolkit();
/**
* 构造登陆窗体
*/
public Login() {
super("思域聊天室");
pnlLogin = new JPanel();
this.getContentPane().add(pnlLogin);
lblUserName = new JLabel("用户名:");
lblPassword = new JLabel("口 令:");
txtUserName = new JTextField(20);
pwdPassword = new JPasswordField(20);
btnLogin = new JButton("登录");
btnLogin.setToolTipText("登录到服务器");
btnLogin.setMnemonic('L');
btnRegister = new JButton("注册");
btnRegister.setToolTipText("注册新用户");
btnRegister.setMnemonic('R');
btnExit = new JButton("退出");
btnExit.setToolTipText("退出系统");
btnExit.setMnemonic('X');
/***********************************************************************
* 该布局采用手动布局 setBounds设置组件位置 * setFont设置字体、字型、字号 * setForeground设置文字的颜色 *
* setBackground设置背景色 * setOpaque将背景设置为透明
*/
pnlLogin.setLayout(null);
pnlLogin.setBackground(new Color(125,100,175));
lblUserName.setBounds(50, 130, 100, 30);
txtUserName.setBounds(150, 130, 120, 25);
lblPassword.setBounds(50, 160, 100, 30);
pwdPassword.setBounds(150, 160, 120, 25);
btnLogin.setBounds(50, 200, 80, 25);
btnRegister.setBounds(130, 200, 80, 25);
btnExit.setBounds(210, 200, 80, 25);
Font fontstr = new Font("宋体", Font.PLAIN, 12);
lblUserName.setFont(fontstr);
txtUserName.setFont(fontstr);
lblPassword.setFont(fontstr);
pwdPassword.setFont(fontstr);
btnLogin.setFont(fontstr);
btnRegister.setFont(fontstr);
btnExit.setFont(fontstr);
lblUserName.setForeground(Color.BLACK);
lblPassword.setForeground(Color.BLACK);
btnLogin.setBackground(Color.ORANGE);
btnRegister.setBackground(Color.ORANGE);
btnExit.setBackground(Color.ORANGE);
pnlLogin.add(lblUserName);
pnlLogin.add(txtUserName);
pnlLogin.add(lblPassword);
pnlLogin.add(pwdPassword);
pnlLogin.add(btnLogin);
pnlLogin.add(btnRegister);
pnlLogin.add(btnExit);
// 设置背景图片
Icon logo1 = new ImageIcon("image\\i.jpg");
lblLogo = new JLabel(logo1);
lblLogo.setBounds(0, 0, 340, 66);
pnlLogin.add(lblLogo);
// 设置登录窗口
setResizable(false);
setSize(340, 260);
setVisible(true);
scrnsize = toolkit.getScreenSize();
setLocation(scrnsize.width / 2 - this.getWidth() / 2, scrnsize.height
/ 2 - this.getHeight() / 2);
Image img = toolkit.getImage("images\\appico.jpg");
setIconImage(img);
// 三个按钮注册监听
btnLogin.addActionListener(this);
btnRegister.addActionListener(this);
btnExit.addActionListener(this);
}
// 构造方法结束
//监视按钮
@SuppressWarnings({"deprecation","deprecation"})
public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
if (source.equals(btnLogin)) {
// 判断用户名和密码是否为空
if (txtUserName.getText().equals("")
|| pwdPassword.getText().equals("")) {
@SuppressWarnings("unused") JOptionPane op1 = new JOptionPane();
JOptionPane.showMessageDialog(null, "用户名或密码不能为空");
} else {
login();
}
}
else if (source.equals(btnRegister)) {
new Register(serverIP);
this.dispose();
}
else if (source == btnExit) {
System.exit(0);
}
}
// actionPerformed()结束
// 登录事件响应方法
@SuppressWarnings("deprecation")
public void login() {
User data = new User();
data.setUserName(txtUserName.getText()) ;
data.setUserPwd(pwdPassword.getText());// 将用户的信息转化成对象
try {
Socket toServer;
toServer = new Socket(serverIP, 30002);
ObjectOutputStream streamToServer = new ObjectOutputStream(toServer
.getOutputStream());
streamToServer.writeObject((User) data);//将用户的信息发送到服务器
BufferedReader fromServer = new BufferedReader(
new InputStreamReader(toServer.getInputStream()));
String status = fromServer.readLine();//读取来自服务器的信息
if (status.equals("登陆成功"))
{
new ChatRoom((String) data.getUserName(), serverIP);//进入聊天室界面
this.dispose();//关闭登陆界面
streamToServer.close();
fromServer.close();
toServer.close();
}
else
{
JOptionPane.showMessageDialog(null, status);//显示错误信息
streamToServer.close();
fromServer.close();
toServer.close();
}
} catch (ConnectException e1) {
JOptionPane.showMessageDialog(null, "未能建立到指定服务器的连接!");
} catch (InvalidClassException e2) {
JOptionPane.showMessageDialog(null, "类错误!");
} catch (NotSerializableException e3) {
JOptionPane.showMessageDialog(null, "对象未序列化!");
} catch (IOException e4) {
JOptionPane.showMessageDialog(null, "不能写入到指定服务器!");
}
}
// login()结束
// 启动登陆窗体
public static void main(String args[]) {
new Login();
}
}
// Class Login结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -