📄 程序界面.java
字号:
//程序界面.java
/**
@author Joedan hongguangming@sohu.com
*/
import java.awt.event.*;
import myevent.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
/**
该类负责用户与所有好友的交互
包含了所有相关类的对象,对所包含对象的各种事件进行响应
其中“好友列表”变量,保存了好友的数据;“list”变量,则保存好友列表的界面
*/
class 程序界面
extends MyFrame//可以设定背景
implements 好友消息发送代理,//对“FRIEND”类的消息发送请求做出响应
好友列表事件监视器//对好友列表的事件做出响应
{
程序界面()//
{
// 画好界面
super("JQQ", "JQQ.gif");
add(list);
list.setBounds(29, 63, 119, 371);
setSize(160, 531);
setResizable(false);
// 为控件加事件监视器
list.添加事件监视器(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
// 保持所有用户聊天记录
// 调用所有好友的“获取聊天记录”方法,对所有聊天记录进行保存
保存聊天记录();
if (收尾者 != null)
收尾者.收尾动作();
else
System.exit(0);
}
}
);
}
public void 添加好友消息发送代理(好友消息发送代理 _发送者)//将消息转发移到外部去实现
{
发送者 = _发送者;
}
public void 添加收尾动作监视器(收尾动作监视器 _收尾者)//将消息转发移到外部去实现
{
收尾者 = _收尾者;
}
public void 刷新好友列表(String msg)//msg为数据报内容
{
// 刷新好友列表
// 清空好友列表
好友列表.clear();
list.清除好友列表();
// 提取人数
StringTokenizer tokenizer = new StringTokenizer(msg, MyConstants.SPLIT);
int num = Integer.parseInt(tokenizer.nextToken());
// 依次提取ID和NAME,增加到“好友列表”中
String id,
name;
for (int i = 0; i < num; i++)
{
id = (String)tokenizer.nextToken();
name = (String)tokenizer.nextToken();
list.添加好友(id, name);
好友列表.put(id, new Friend(id, name));
}
}
public void 刷新在线好友列表(String msg)//msg为数据报内容
{
// 刷新在线好友列表
// 使所有好友下线
Enumeration 遍历好友列表 = 好友列表.keys();
String key;
while (遍历好友列表.hasMoreElements())
{
key = (String)遍历好友列表.nextElement();
((Friend)好友列表.get(key)).下线();//
list.好友下线(key);
}
// 提取人数
StringTokenizer tokenizer = new StringTokenizer(msg, MyConstants.SPLIT);
int num = Integer.parseInt(tokenizer.nextToken());
// 依次提取ID、IP和PORT,设置对应好友的信息,使其成为在线好友
String id,//
ip,//
port;//
Friend tmp;
for (int i = 0; i < num; i++)
{
id = (String)tokenizer.nextToken();
ip = (String)tokenizer.nextToken();
port = (String)tokenizer.nextToken();
list.好友上线(id);
tmp = (Friend)好友列表.get(id);
tmp.上线(ip, port, this);
tmp.添加好友消息发送代理(this);
}
}
public void 好友上线(String msg) //msg为数据报内容
{
// 修改在线好友列表
// 提取ID、IP和PORT
StringTokenizer tokenizer = new StringTokenizer(msg, MyConstants.SPLIT);
String id = (String)tokenizer.nextElement(),//
ip = (String)tokenizer.nextElement(),//
port = (String)tokenizer.nextElement();//
// 增加对应好友的上线资料
list.好友上线(id);
((Friend)好友列表.get(id)).上线(ip, port, this);
}
public void 好友下线(String msg) //msg为数据报内容
{
// 修改在线好友列表
// 提取ID
String id = msg;//
// 设置对应好友为下线
list.好友下线(id);
((Friend)好友列表.get(id)).下线();
}
public void 好友消息处理(String _msg) //msg为数据报内容
{
// 提取好友ID,提取好友的消息MSG
int SplitPos = _msg.indexOf(MyConstants.SPLIT);
String id = _msg.substring(0, SplitPos),//
msg = _msg.substring(SplitPos + 1);//
// 将MSG转到对应“FRIEND”类对象去处理
((Friend)好友列表.get(id)).添加新消息(msg);
// 提示用户
list.新消息(id);
}
//*/
public void 好友消息发送(SocketAddress add, String msg)//实现发友消息发送代理的功能
{
if (发送者 != null)
发送者.好友消息发送(add, msg);
}
public void 好友列表鼠标双击处理(String id)//实现对好友列表鼠标事件的响应
{
// 如果对应好友在线,就调出聊天界面
Friend tmp = (Friend)好友列表.get(id);
if (tmp.是否在线())
tmp.显示聊天界面();
}
/*
public void windowClosing(WindowEvent e)//窗体关闭时
{
// 保持所有用户聊天记录
调用所有好友的“获取聊天记录”方法,对所有聊天记录进行保存
}
//*/
private void 保存聊天记录()
{
System.out.println("保存聊天记录");
}
private Hashtable 好友列表 = new Hashtable();//存放所有好友类对象
private 好友列表 list = new 好友列表();
private 好友消息发送代理 发送者;
private 收尾动作监视器 收尾者;
public static void main(String args[])
{
程序界面 win = new 程序界面();
win.刷新好友列表("5,1000,Joe,1001,Dan,1002,test,1003,Hello,1004,ok");
win.刷新在线好友列表("3,1000,127.0.0.1,5959,1001,127.0.0.1,5959,1004,127.0.0.1,5959");
try
{
Thread.sleep(2000);
win.好友上线("1002,127.0.0.1,5959");
Thread.sleep(2000);
win.好友下线("1002");
win.好友消息处理("1000,Hello world");
Thread.sleep(5000);
win.好友消息处理("1000,Hello world");
}
catch(InterruptedException e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -