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

📄 程序界面.java

📁 用JAVA写的qq,为qq的跨平台使用提供了可能,一直都很讨厌tencent不为linux提供方便,自己写了一个qq,希望有人继续完善,我现在没空做了
💻 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 + -