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

📄 c_loginframeevent.java

📁 聊天工具
💻 JAVA
字号:
package client.login;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import utils.InfoPacket;
import utils.PropUtils;
import utils.StaticUtils;
import client.chat.chatpane.ChatFrame;
import client.chat.node.DpmNode;
import client.chat.node.RootNode;
import client.chat.node.UserNode;
import client.thread.ReadThread;

	/**
	 * 登录窗口事件类,用 e.getSource() 方法来识别事件源,也可以通过 e.getActionCommand()来识别事件源
	 * @author 洪景泉
	 *
	 */

public class C_LoginFrameEvent implements ActionListener {
	
	C_LoginFrame lf=null;
	private InputStream is=null;
	private OutputStream os=null;
	private ReadThread readThread =null;
	/**
	 * 通过构造函数把登录窗口界面传进来
	 * @param lf
	 */
	public C_LoginFrameEvent(C_LoginFrame lf) {
		this.lf = lf;
	}
	public void actionPerformed(ActionEvent e) {
		//System.out.println(new String(lf.getPassWord().getPassword()));
		if (e.getSource() == lf.getSet()) {
			if (lf.getVBoxnet().isVisible()) {
				//lf.getJFrame().setSize(500,500);
				lf.getVBoxnet().setVisible(false);
				lf.getSet().setText("设置↓");
				lf.getJFrame().setSize(332, 260);
				
			} else {
				//lf.add(lf.getVBoxnet(),BorderLayout.SOUTH);
				lf.getVBoxnet().setVisible(true);
				lf.getSet().setText("设置↑");
				lf.getJFrame().setSize(332,350);
			}
			lf.setLocationRelativeTo(null);
			} 
		//单击登入事件
		if (e.getSource() == lf.getLogin()) {
						
			if(((String)lf.getUserName().getSelectedItem()).equals("")){
				JOptionPane.showMessageDialog(lf, "用户帐号不能为空");
				lf.getUserName().requestFocus();
				return;
			}
			if((lf.getPassWord().getPassword()).length==0){
				JOptionPane.showMessageDialog(lf, "用户密码不能为空");
				lf.getPassWord().requestFocus();
				return;
			}
				
			if(((String)lf.getServerIP().getSelectedItem()).equals("")){
				JOptionPane.showMessageDialog(lf, "服务器IP不能为空");
				lf.getServerIP().requestFocus();
					return;
			}
			if(((String)lf.getPost().getSelectedItem()).equals("")){
				JOptionPane.showMessageDialog(lf, "服务器端口不能为空");
				lf.getPost().requestFocus();
				return;
			}
		//记住账号复选框选中时记录用户ID,默认时选中
			if(lf.getSaveNum().isSelected()){
				//System.out.println(lf.getUserName().getSelectedItem());
				//lf.getUserName().addItem(lf.getUserName().getSelectedItem().toString());
				//把他保存到文件中
				String id=lf.getUserName().getSelectedItem().toString();
				String pwd=new String(lf.getPassWord().getPassword());
				if(lf.getSavePWD().isSelected()){
					PropUtils.write(id,pwd);
				}else{
					PropUtils.write(id,"");
				}
			}
				
			String serverIP=(String)lf.getServerIP().getSelectedItem();
			int post=Integer.parseInt((String)lf.getPost().getSelectedItem());
			Socket sock=null;
	
			try {
				sock = new Socket(serverIP,post);
				is=sock.getInputStream();
				os=sock.getOutputStream();
				
			} catch (UnknownHostException e1) {
				System.out.println("1");
				System.out.println("服务器IP地址错误或者端口号错误");
				JOptionPane.showMessageDialog(lf, "请查看服务器IP跟端口号有没有设置正确", "错误提示",JOptionPane.ERROR_MESSAGE);
				e1.printStackTrace();
				return;
			} catch (IOException e1) {
				System.out.println("2");
				//服务器没有开启
				JOptionPane.showMessageDialog(lf, "连接服务器超时", "错误提示",JOptionPane.ERROR_MESSAGE);
				e1.printStackTrace();
				return;
			}
				
					
			try {
				String user = lf.getUserName().getSelectedItem().toString();
				String pwd =new String(lf.getPassWord().getPassword());
				
				String loginDatas=null;
				loginDatas=user+","+pwd;
				
				
				// 构建包
				InfoPacket loginPacket = new InfoPacket(InfoPacket.LOGIN, user, "",loginDatas);
				// 打包并发送
				os.write(loginPacket.toByteArray());
				
				byte[] bs = new byte[1024];
				is.read(bs);
				
				//接收服务器返回包
				InfoPacket inceptPack = null;
				inceptPack =new InfoPacket(bs);
				//解包判断,true为登录成功,false为登录失败
				if(inceptPack.getFrom().equals("true")){
					lf.dispose();
					if(inceptPack.getType()==InfoPacket.LOGIN_RESP){
						ChatFrame chatFrame = new ChatFrame("企业级QQ聊天界面",is,os);
						String inceptDatas = inceptPack.getDatas();
						//把服务器返回的消息体的内容放到一个动态数组里面
						Vector<Vector<String>> datas = new Vector<Vector<String>>();
						String[] sArr =inceptDatas.split("!");
//						System.out.println("*****************");
//						System.out.println(inceptDatas);
//						System.out.println("*****************");
						for (int i = 0; i < sArr.length; i++) {
							Vector<String> vRow = new Vector<String>();
							String[] vArr=sArr[i].split(",");
							for (int j = 0; j < vArr.length; j++) {
								vRow.add(vArr[j]);
							}
							datas.add(vRow);
						}
						//生成用户树模型
						DefaultMutableTreeNode root = new DefaultMutableTreeNode(new RootNode("全公司"));
						DefaultTreeModel userTreeModel = new DefaultTreeModel(root);
						//生成部门节点
						ArrayList<String> dpmList=new ArrayList<String>();
						dpmList.add("市场部");
						dpmList.add("开发部");
						dpmList.add("生产部");
						dpmList.add("会计部");
						for (int i = 0; i < dpmList.size(); i++) {
							DefaultMutableTreeNode dpmNode = new DefaultMutableTreeNode(new DpmNode((String)dpmList.get(i)));
							root.add(dpmNode);
					//	 增加部门对应的用户节点
							for (int j = 0; j < datas.size(); j++) {
								Vector vectorUser = datas.get(j);
								String userID = (String) vectorUser.get(0);
								String userName = (String) vectorUser.get(1);
								String userNickName = (String) vectorUser.get(2);
								String userPassword = (String) vectorUser.get(3);
								String userAge = (String) vectorUser.get(4);
								String userTelephone = (String) vectorUser.get(5);
								String userDpm = (String) vectorUser.get(6);
								String userAddress = (String) vectorUser.get(7);
								String userOnline = (String) vectorUser.get(8);
								String userIcon = (String) vectorUser.get(9);
									
								if (dpmList.get(i).equals(userDpm)) {
									DefaultMutableTreeNode userNode = new DefaultMutableTreeNode(
									new UserNode(userID, userName, userDpm,userOnline, userIcon));
									dpmNode.add(userNode);
									// 存储用户节点
									StaticUtils.usersNodeMap.put(userID, userNode);
								}
								//找出当前登录的用户的信息并保存到currenUser中
								if (userID.equals(user)) {
									chatFrame.getTopPane().getIconLab().setIcon(new ImageIcon("./image/newface/" +
												userIcon+ ".gif"));
									chatFrame.getTopPane().getNameLab().setText(userName );
									//把服务端返回来的用户信息保存到currenUser中
									StaticUtils.currentUser.put("userID",userID);
									StaticUtils.currentUser.put("userName",userName);
									StaticUtils.currentUser.put("userNickName",userNickName);
									StaticUtils.currentUser.put("userPassword",userPassword);
									StaticUtils.currentUser.put("userAge",userAge);
									StaticUtils.currentUser.put("userTelephone",userTelephone);
									StaticUtils.currentUser.put("userDpm",userDpm);
									StaticUtils.currentUser.put("userAddress",userAddress);
									StaticUtils.currentUser.put("userOnline",userOnline);
									StaticUtils.currentUser.put("userIcon",userIcon);
										
								}
							}
						}	
							chatFrame.getRPane().getUserTree().setModel(userTreeModel);
							chatFrame.getRPane().getUserTree().setSelectionRow(0);
							
							//创建线程,读取信息
							ReadThread readThread = new ReadThread(chatFrame,user,is,os);
							readThread.start();
							
							chatFrame.setVisible(true);
						}
					}else if(inceptPack.getFrom().equals("false")){
						String flagMap =inceptPack.getDatas();
						JOptionPane.showMessageDialog(lf, flagMap+"", "错误提示",JOptionPane.ERROR_MESSAGE);
						lf.getPassWord().setText("");
						lf.getPassWord().requestFocus();
						if(flagMap.equals("用户帐号不存在")){
							lf.getUserName().requestFocus();
						}
						return;
					}
					
				} catch (IOException e1) {
//					System.out.println("3");
					JOptionPane.showMessageDialog(lf, "输入输出流异常", "错误提示",JOptionPane.ERROR_MESSAGE);
					e1.printStackTrace();
					return;
				}
				
			}

			if (e.getSource() == lf.getCancel()) {
				System.exit(0);
			}
			//选中某个用户ID时,读取对应的密码
			if (e.getActionCommand().equals("userID")) {
				//System.out.println("123456");
				String id=(String)lf.getUserName().getSelectedItem();
				lf.getPassWord().setText(PropUtils.read(id));
			}
		}

		public ReadThread getReadThread() {
			return readThread;
		}

	}

⌨️ 快捷键说明

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