⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 login.java

📁 与大家分享
💻 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 + -