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

📄 loginpanel.java

📁 用java开发的QQ管理系统
💻 JAVA
字号:
package com.zlf.qqclient.login;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

import com.zlf.qq.pub.DataPacket;
import com.zlf.qqclient.mainframe.MainFrame;
import com.zlf.qqclient.utils.Public;
import com.zlf.qqclient.utils.QQUtils;

/**
 * 登录窗
 * 
 * @author zlf
 * 
 */
public class LoginPanel extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 5924038127713163146L;

	private JLabel topLabel;

	private JLabel qqNo;

	private JLabel qqPwd;

	private JComboBox ComNo;

	private JPasswordField pwd;

	private JCheckBox rememberNo;

	private JCheckBox rememberPwd;

	private JButton btnSet;

	private JButton btnLogin;

	private JLabel serverAddrLabel;

	private JLabel portNumLabel;

	private JComboBox serverAddrCombo;

	private JTextField portNumText;

	private JPanel topPanel;// 上部

	private JPanel centerPanel;// 中部

	private JPanel bottomPanel;// 下部

	private int flag = 0;// 0隐藏着1拉长的

	private MainFrame chatFrame;
	
	private String IPAdress = null;
	
	public LoginPanel(){
		
	}
	
	/**
	 * 
	 * LoginPanel构造
	 * @param f 
	 * 
	 */
	LoginPanel(final JFrame f) {
		this.setLayout(new BorderLayout());
		Box box = Box.createVerticalBox();
		// 上部panel放一个图片,存放用户id对应的头像和名字
		topPanel = new JPanel();
		topPanel.setLayout(new BorderLayout());
		topLabel = new JLabel(QQUtils.getTotalIcon("qqbanner.jpg"));
		topPanel.add(topLabel, BorderLayout.CENTER);

		// 中部
		qqNo = new JLabel("QQ号码");
		qqPwd = new JLabel("QQ密码");

		// QQ号码编辑框

		String[] QQ_id = new String[] {
			QQUtils.properties.getProperty("QQ_id")
		};
		
		ComNo = new JComboBox(QQ_id);

		
		ComNo.setBackground(Color.white);
		ComNo.setEditable(true);

		// 密码编辑框
		pwd = new JPasswordField(QQUtils.properties.getProperty("QQ_Pwd"));
		pwd.setEchoChar('*');
		// 记住号码和密码
		rememberNo = new JCheckBox("记录号码");
		rememberNo.setSelected(true);
		rememberNo.setOpaque(false);
		rememberPwd = new JCheckBox("记录密码");
		rememberPwd.setOpaque(false);
		// 设置服务器IP和端口号
		btnSet = new JButton((ImageIcon) QQUtils.getTotalIcon("set.gif"));
		btnSet.setText("设  置");
		btnSet.setHorizontalTextPosition(JButton.CENTER);
		btnSet.setVerticalTextPosition(JButton.CENTER);
		btnSet.setBorder(BorderFactory.createEmptyBorder());
		btnSet.addActionListener(new AbstractAction() {
			/**
			 * 增加设置按钮监听,弹出和隐藏配置框
			 */
			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) {
				if (flag == 0) {
					bottomPanel.setVisible(true);
					f.setSize(330, 350);
					flag = 1;// 拉长了
				} else if (flag == 1) {
					bottomPanel.setVisible(false);
					f.setSize(330, 250);
					flag = 0;
				}
			}

		});
		// 登录按钮
		btnLogin = new JButton((ImageIcon) QQUtils.getTotalIcon("login.gif"));
		btnLogin.setText("登  录");
		btnLogin.setHorizontalTextPosition(JButton.CENTER);
		btnLogin.setVerticalTextPosition(JButton.CENTER);
		//btnLogin.setMargin(new Insets());
		btnLogin.setBorder(BorderFactory.createEmptyBorder());
		btnLogin.addActionListener(new AbstractAction() {

			/**
			 * 登录按钮监听事件
			 */
			private static final long serialVersionUID = 1L;

			public void actionPerformed(ActionEvent e) {
				// 登录时做的事,验证输入,连接服务器,发送登录包
				
				if (ComNo.getSelectedItem().equals("")) {
					JOptionPane.showMessageDialog(f, "用户编号不能为空",
							"提示框", JOptionPane.WARNING_MESSAGE);
					return;
				}
				
				if (new String(pwd.getPassword()).equals("")){
					JOptionPane.showMessageDialog(f, "密码不能为空",
							"提示框", JOptionPane.WARNING_MESSAGE);
					return;
				}
				
				
				int port = 0;
				ObjectOutputStream oos = null;
				ObjectInputStream ois = null;
				DataPacket loginPacket = null;
				Socket s = null;
				if ((!serverAddrCombo.getSelectedItem().equals(""))
						&& (!portNumText.getText().equals(""))) {
					IPAdress = (String) serverAddrCombo.getSelectedItem();
					port = Integer.parseInt(portNumText.getText());
					try {
						s = new Socket(IPAdress, port);
						//连接成功,保存服务器IP和端口号的配置
						QQUtils.properties.setProperty("Address", (String)serverAddrCombo.getSelectedItem());
						QQUtils.properties.setProperty("port", portNumText.getText());
						QQUtils.saveProperties();
						// 给服务器发送消息,登录包
						oos = new ObjectOutputStream(new BufferedOutputStream(s
								.getOutputStream()));
						if ((!((String) ComNo.getSelectedItem()).equals(""))
								&& (!(pwd.getPassword()).equals(""))) {
							String userNo = (String) ComNo.getSelectedItem();
							String userPwd = String.valueOf(pwd.getPassword());
							HashMap data = new HashMap();
							data.put("userNo", userNo);
							data.put("userPwd", userPwd);
							loginPacket = new DataPacket(DataPacket.Login_type,
									userNo, DataPacket.Server_Id, data);
							oos.writeObject(loginPacket);
							oos.flush();
							// 接收验证包
							ois = new ObjectInputStream(
									new BufferedInputStream(s.getInputStream()));
							DataPacket serverPacket = (DataPacket) ois
									.readObject();
							if (serverPacket.getType().equals(
									DataPacket.ValiDate_type)) {
								if ((serverPacket.getData().get("tag")
										.equals("0"))
										|| (serverPacket.getData().get("tag")
												.equals("1"))
										|| (serverPacket.getData().get("tag")
												.equals("2"))) {
									String wrong = (String) serverPacket
											.getData().get("data");
									JOptionPane.showMessageDialog(f, wrong,
											"提示框", JOptionPane.WARNING_MESSAGE);
								} else {
									if (rememberNo.isSelected() == true) {
										Public.finalUserNo=(String) ComNo
										.getSelectedItem();
										
										// 将号码保存到配置文件中
										
										
										QQUtils.properties.setProperty("QQ_id",
												(String) ComNo.getSelectedItem());
										QQUtils.saveProperties((String) ComNo.getSelectedItem());
									}
									if (rememberPwd.isSelected() == true) {
										
										Public.finalUserPwd=String.valueOf(pwd
												.getPassword());
										
										// 保存密码
										QQUtils.properties.setProperty(
												"QQ_Pwd", String.valueOf(pwd
														.getPassword()));
										QQUtils.saveProperties((String) ComNo.getSelectedItem());
										
									}
									
									
									
									// 通过了验证,解包,把用户信息,部门信息存放在公共变量里
									ArrayList arryList = (ArrayList) serverPacket
											.getData().get("data");
									Public.userVector = (Vector) arryList
											.get(0);
									Public.deptVector = (Vector) arryList
											.get(1);
									// 释放登录窗体
									f.dispose();
									chatFrame = new MainFrame(userNo);
									// 创建一个线程,用于接受信息
									RecieveThread recieveThread = new RecieveThread(
											ois, chatFrame);
									Thread myRecieveThread = new Thread(recieveThread);
									myRecieveThread.start();// 启动线程
									// 保存信息,将线程,socket,dos,dis保存到全局变量
									ArrayList a = new ArrayList();
									a.add(myRecieveThread);
									a.add(s);
									a.add(oos);
									a.add(ois);
									Public.mySocketInfo.put(userNo, a);
									QQUtils.setProperties(userNo);
								}
							}
						} 

					} catch (UnknownHostException e1) {
						e1.printStackTrace();
						return;
					} catch (IOException e1) {
						JOptionPane.showMessageDialog(f, "服务器连接失败!", "提示框",
								JOptionPane.WARNING_MESSAGE);
						return;
					} catch (ClassNotFoundException e1) {
						e1.printStackTrace();
					}
				}

			}


		});
		
		
		// 界面布局
		JPanel panel1 = new JPanel();
		panel1.setLayout(new BorderLayout());
		Box panelBox1 = Box.createHorizontalBox();
		panelBox1.add(Box.createHorizontalStrut(40));
		panelBox1.add(qqNo);
		panelBox1.add(Box.createHorizontalStrut(10));
		panelBox1.add(ComNo);
		panelBox1.add(Box.createHorizontalStrut(40));
		panel1.add(panelBox1);
		panel1.setBackground(new Color(235, 250, 255));

		JPanel panel2 = new JPanel();
		panel2.setLayout(new BorderLayout());
		Box panelBox2 = Box.createHorizontalBox();
		panelBox2.add(Box.createHorizontalStrut(40));
		panelBox2.add(qqPwd);
		panelBox2.add(Box.createHorizontalStrut(10));
		panelBox2.add(pwd);
		panelBox2.add(Box.createHorizontalStrut(40));
		panel2.add(panelBox2);
		panel2.setBackground(new Color(235, 250, 255));

		JPanel panel3 = new JPanel();
		panel3.add(rememberNo);
		panel3.add(Box.createHorizontalStrut(10));
		panel3.add(rememberPwd);
		panel3.setBackground(new Color(235, 250, 255));

		JPanel panel4 = new JPanel();
		panel4.add(btnSet);
		panel4.add(Box.createHorizontalStrut(10));
		panel4.add(btnLogin);
		panel4.setBackground(new Color(200, 240, 255));

		JPanel centerTopPanel = new JPanel();
		centerTopPanel
				.setLayout(new BoxLayout(centerTopPanel, BoxLayout.Y_AXIS));
		centerTopPanel.setBorder(BorderFactory.createLineBorder(new Color(100,
				180, 255)));
		centerTopPanel.add(Box.createVerticalStrut(10));
		centerTopPanel.add(panel1);
		centerTopPanel.add(Box.createVerticalStrut(15));
		centerTopPanel.add(panel2);
		centerTopPanel.add(Box.createVerticalStrut(15));
		centerTopPanel.add(panel3);
		centerTopPanel.setBackground(new Color(235, 250, 255));

		centerPanel = new JPanel();
		centerPanel.setLayout(new BorderLayout());
		centerPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
		Box centerPanelBox = Box.createVerticalBox();
		centerPanelBox.add(centerTopPanel);
		centerPanelBox.add(Box.createVerticalStrut(10));
		centerPanelBox.add(panel4);
		centerPanel.add(centerPanelBox);
		// 设置背景色
		Color bg = new Color(200, 240, 255);
		centerPanel.setBackground(bg);

		// 下部的布局
		serverAddrLabel = new JLabel("服务器地址:");
		portNumLabel = new JLabel("端  口  号:");
		// 服务器IP地址的输入下拉框
		serverAddrCombo = new JComboBox();
		serverAddrCombo.setBackground(Color.white);
		serverAddrCombo.setEditable(true);
		serverAddrCombo.addItem(QQUtils.properties.getProperty("Address"));
		String[] localIP = getAllLocalHostIP();
		for(int i=0 ; i<localIP.length ; i++){
			//System.out.println( localIP[i]);
			serverAddrCombo.addItem(localIP[i]);	
		}
		
		
		
		// 端口号的输入框
		portNumText = new JTextField();
		portNumText.setText(QQUtils.properties.getProperty("port"));
		
		Box box1 = Box.createHorizontalBox();
		box1.add(Box.createHorizontalStrut(35));
		box1.add(serverAddrLabel);
		box1.add(Box.createHorizontalStrut(10));
		box1.add(serverAddrCombo);
		box1.add(Box.createHorizontalStrut(35));

		Box box2 = Box.createHorizontalBox();
		box2.add(Box.createHorizontalStrut(35));
		box2.add(portNumLabel);
		box2.add(Box.createHorizontalStrut(10));
		box2.add(portNumText);
		box2.add(Box.createHorizontalStrut(35));

		Box outBox = Box.createVerticalBox();
		outBox.add(Box.createVerticalStrut(10));
		outBox.add(box1);
		outBox.add(Box.createVerticalStrut(10));
		outBox.add(box2);
		outBox.add(Box.createVerticalStrut(10));

		bottomPanel = new JPanel();
		bottomPanel.setLayout(new BorderLayout());

		bottomPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
		JPanel bottomInnerPanel = new JPanel();
		bottomInnerPanel.setLayout(new BorderLayout());
		bottomInnerPanel.setBorder(new TitledBorder("网络设置"));
		bottomInnerPanel.add(outBox);
		bottomInnerPanel.setBackground(new Color(200, 240, 255));
		bottomPanel.add(bottomInnerPanel);
		bottomPanel.setBackground(new Color(200, 240, 255));
		box.add(centerPanel);

		this.add(topPanel, BorderLayout.NORTH);
		this.add(box, BorderLayout.CENTER);
		this.add(bottomPanel, BorderLayout.SOUTH);

		// 隐藏设置框
		bottomPanel.setVisible(false);

	}

	public JPanel getBottomPanel() {
		return bottomPanel;
	}

	public void setBottomPanel(JPanel bottomPanel) {
		this.bottomPanel = bottomPanel;
	}
	
	/**
	 * getLocalHostName()
	 * @return 主机名
	 */
	public static String getLocalHostName(){
		String hostName;
		try{
			InetAddress addr = InetAddress.getLocalHost();
			hostName = addr.getHostName();
		}
		catch(Exception ex){
			hostName = "localhost";
		}
		return hostName;
	}
	
	/**
	 * getAllLocalHostIP()
	 * @return 一组本机IP地址
	 */
	public static String[] getAllLocalHostIP(){
		String[] ret = null;
		try{
			String hostName = getLocalHostName();
			if(hostName.length()>0){
				InetAddress[] addrs = InetAddress.getAllByName(hostName);
				if(addrs.length>0){
					ret = new String[addrs.length];
					for(int i=0 ; i< addrs.length ; i++){
						ret[i] = addrs[i].getHostAddress();
					}
				}
			}
			
		}
		catch(Exception ex){
			ret = null;
		}
		return ret;
	}

	public String getIPAdress() {
		return IPAdress;
	}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -