📄 c_loginframeevent.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 + -