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

📄 clientframe.java

📁 实现多人即时聊天
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	
	
	len=PubMsglist.size();
	for(int i=0;i<len;i++){
	   tempPubMsg=(PublicMessage)PubMsglist.get(i);
	   PubMsgText.append(tempPubMsg.getstrLocaleDate()+"\n");
	   PubMsgText.append(tempPubMsg.getSenderName()+"\n");
	   PubMsgText.append(tempPubMsg.getPubMsg()+"\n");
	   PubMsgText.append("\n");
	}
	   	   


	len=Msglist.size();
	for(int i=0;i<len;i++){
	   tempmsg=(Message)Msglist.get(i);
	   MsgText.append(tempmsg.getstrLocaleDate()+"\n");
	   MsgText.append(tempmsg.getfromName()+"\n");
	   MsgText.append(tempmsg.getMsg()+"\n");
	   MsgText.append("\n");
	}
}//public void Init()

public void send(Message msg,boolean RealTime){

System.out.println("in ClientFrame send(Message msg,boolean RealTime)");
System.out.println("准备调用Client send(Message msg,boolean RealTime)");

	client.send(msg,RealTime);
}//public void send(Message msg,boolean RealTime)


public void send(User MyNewInfo){

System.out.println("in ClientFrame send(User MyNewInfo)");

System.out.println("真实姓名:"+MyNewInfo.getUserName());
System.out.println("职位:"+MyNewInfo.getJob());

System.out.println("准备调用Client send(User MyNewInfo)");


	client.send(MyNewInfo);
}//public void send(User MyNewInfo)


public void RealTimeMsgReceiver(Message msg){
//首先通过查询Client的OnlineUsers/OfflineUsers找到User并由User生成DiagFrame
//接着通过查询Client的OnlineUsers/OfflineUsers找到User对应的Vector中的下标和在线状态
//通过检索到的下标使Jlist中相同下标的项目反色显示
//该实现方法要求OnlineUsers/OfflineUsers中条目和连个Jlist条目严格一致

//改进版将通过检索Jlist获得项目并反色显示,不必通过检索Client的OnlineUsers/OfflineUsers
//这种实现同样需要OnlineUsers/OfflineUsers中条目和连个Jlist条目严格一致

System.out.println("in ClientFrame RealTimeMsgReceiver() 正在交付即时信息");

	User tempuser;
	DiagFrame tempDiagframe;
	int index;	//该高亮条目的下标

	tempuser=client.RegNameToUser(msg.getfromName());

	if(tempuser==null) return;

	tempDiagframe=(DiagFrame)DiagFrames.get(tempuser.getRegName());

	if(tempDiagframe==null){
		tempDiagframe=new DiagFrame(ClientFrame.this,myself,tempuser,tempuser.getOnlineState());
		//最后一个参数取决于tempuser.getOnlineState()是因为可能刚刚在线发完消息就下线了
		DiagFrames.put(tempuser.getRegName(),tempDiagframe);	
	}

System.out.println("in ClientFrame RealTimeMsgReceiver() 准备交付即时信息到Diagframe");
			
	tempDiagframe.RealTimeMsgReceiver(msg);
	
	
	index=client.RegNameToindex(msg.getfromName(),true);

	if(index!=-1){
	    //高亮显示
	    OnlineList.setSelectedIndex(index);		
	    OnlineList.setSelectionBackground(new Color(0,255,0));
	}else{
	    index=client.RegNameToindex(msg.getfromName(),false);
	    //高亮显示
	    OfflineList.setSelectedIndex(index);	//下标越界会如何处理?			
	    OfflineList.setSelectionBackground(new Color(0,255,0));	
	}


/**************************下面代码因为不能在DiagFrame中显示好友发送来的信息所以显示在ClientFrame中*********/
/*****退而求其次的解决方案*****/
		MsgText.append(msg.getstrLocaleDate()+"   "+msg.getfromName());
		MsgText.append("\n");
		MsgText.append(msg.getMsg());
		MsgText.append("\n");

/**************************上面代码因为不能在DiagFrame中显示好友发送来的信息所以显示在ClientFrame中*********/



}//public void RealTimeMsgReceiver(Message msg)



public void PubMsgReceiver(PublicMessage PubMsg){

	   PubMsgText.append(PubMsg.getstrDate()+"\n");
	   PubMsgText.append(PubMsg.getSenderName()+"\n");
	   PubMsgText.append(PubMsg.getPubMsg()+"\n");
	   PubMsgText.append("\n");
}//public void PubMsgReceiver(PublicMessage PubMsg)



public void UpdateUserlist(User user,boolean on){
//在更新之前Client中的Vector OnlineUsers,Vector OfflineUsers
//已经改变过了,所以JList中的项目和OnlineUsers,OfflineUsers是一致的
//此方法是public void UpdateUserlist(Vector OnlineUsers,Vector OfflineUsers)的改进版
//不必对整个Jlist重新刷新,只需在Jlist中调整个别条目,提高了性能

	//根据on值改变两个JList的条目

}//public void UpdateUserlist(User user,boolean on)



public void UpdateUserlist(Vector OnlineUsers,Vector OfflineUsers){
//在更新之前Client中的Vector OnlineUsers,Vector OfflineUsers
//已经改变过了,所以JList中的项目和OnlineUsers,OfflineUsers是一致的

/*************************以下测试************************************/
System.out.println("in ClientFrame UpdateUserlist");
System.out.println("开始刷新Client中Jlist");
//System.out.println("OnlineUsers.size()="+OnlineUsers.size());
//System.out.println("OfflineUsers.size()="+OfflineUsers.size());
///System.out.println("两个Vector中条目修改之后");
//System.out.println("OnlineUsers中内容:");
//User testUser;

//for(int i=0,len=OnlineUsers.size();i<len;i++){
//	testUser=(User)OnlineUsers.get(i);
//	testUser.display();
//	System.out.println();
//}

//System.out.println("OfflineUsers中内容:");

//for(int i=0,len=OfflineUsers.size();i<len;i++){
//	testUser=(User)OfflineUsers.get(i);
//	testUser.display();
//	System.out.println();
//}

/*************************以上测试************************************/

	//根据Client的OnlineUsers和OfflineUsers刷新两个JList的条目
	//先清除后添加
	JListOnlineModel.removeAllElements();
	JListOfflineModel.removeAllElements();

	for(int i=0,len=OnlineUsers.size();i<len;i++){
	   JListOnlineModel.addElement(OnlineUsers.get(i));
	}
	
	for(int i=0,len=OfflineUsers.size();i<len;i++){
	   JListOfflineModel.addElement(OfflineUsers.get(i));
	}   

}//public void UpdateUserlist(Vector OnlineUsers,Vector OfflineUsers)

public boolean isOnline(String RegName){
	return client.isOnline(RegName);
}

public static void main(String args[]){
	new ClientFrame().setVisible(true);
}//main()


}//class ClientFrame extends JFrame



class OnlineIconCellRenderer extends JLabel implements ListCellRenderer{
	public OnlineIconCellRenderer(){setOpaque(true);}//JListIcon()----设置选中项目高亮显示

	public Component getListCellRendererComponent(JList list,		//所要画上图像的JList组件
         					      Object value,		//JList项目的值,如list.getModel().getElementAt(index)所返回的值
         					      int index,		//JList项目索引值	
         					      boolean isSelected,	//判断JList项目是否被选中
         					      boolean cellHasFocus){	//判断JList项目是否有焦点置入
         	if(value!=null){
			setText(((User)value).getUserName());
			setIcon(new ImageIcon(".\\pics\\"+(index+17)+".gif"));
			//如果指定的文件不存在则运行时不会显示任何图片
		}

		if(isSelected){
             		setBackground(list.getSelectionBackground());
             		setForeground(list.getSelectionForeground());
           	}else{
             		setBackground(list.getBackground());
               		setForeground(list.getForeground());
           	}

		return this;
     	}//public Component getListCellRendererComponent()



}//class OnlineIconCellRenderer extends JLabel implements ListcellRenderer



class OfflineIconCellRenderer extends JLabel implements ListCellRenderer{
	public OfflineIconCellRenderer(){setOpaque(true);}//JListIcon()----设置选中项目高亮显示

	public Component getListCellRendererComponent(JList list,		//所要画上图像的JList组件
         					      Object value,		//JList项目的值,如list.getModel().getElementAt(index)所返回的值
         					      int index,		//JList项目索引值	
         					      boolean isSelected,	//判断JList项目是否被选中
         					      boolean cellHasFocus){	//判断JList项目是否有焦点置入
         	if(value!=null){
			setText(((User)value).getUserName());
			setIcon(new ImageIcon(".\\pics\\"+(index+5)+".gif"));
		}

		if(isSelected){
             		setBackground(list.getSelectionBackground());
             		setForeground(list.getSelectionForeground());
           	}else{
             		setBackground(list.getBackground());
               		setForeground(list.getForeground());
           	}

		return this;
     	}//public Component getListCellRendererComponent()



}//class OfflineIconCellRenderer extends JLabel implements ListcellRenderer









⌨️ 快捷键说明

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