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

📄 clientframe.java

📁 实现多人即时聊天
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
import java.util.Hashtable;


//DiagFrame(ClientFrame clientframe,User myself,User myFriend,boolean Online)


class ClientFrame extends JFrame{

	Client client;
	Hashtable DiagFrames;
	Hashtable RealTimeMsgs;
	User myself;
/****************************************************以下组件****************************************************/       	
	Container contentPane;		//顶层容器

	JScrollPane PubMsgScroll;   	//显示公告的滚动条
	JTextArea PubMsgText;		//显示公告的文本框
	
	JScrollPane MsgScroll;   	//显示留言的滚动条
	JTextArea MsgText;		//显示留言的文本框
	
	JScrollPane OnlineScroll;	//显示在线用户的列表
	JList OnlineList;
	DefaultListModel JListOnlineModel;

	JScrollPane OfflineScroll;	//显示不在线用户的列表
	JList OfflineList;				
	DefaultListModel JListOfflineModel;


	JButton ModifyBtn;		//修改信息按钮
	//JButton cancelBtn;		//关闭按钮
/****************************************************以上组件****************************************************/
public ClientFrame(Client client){
	this();
	this.client=client;
	DiagFrames=new Hashtable();
	RealTimeMsgs=new Hashtable();
}
public ClientFrame(){
		super("Client of Communication");
		
		//创建容器
		contentPane=this.getContentPane();
		contentPane.setLayout(new GridBagLayout());
		
		PubMsgText=new JTextArea();
		PubMsgText.setEditable(false);
		PubMsgText.setBorder(BorderFactory.createTitledBorder("Public Message from company:"));
		PubMsgScroll=new JScrollPane(PubMsgText);
		
		
		MsgText=new JTextArea();
		MsgText.setEditable(false);
		MsgText.setBorder(BorderFactory.createTitledBorder("Message from friends:"));
		MsgScroll=new JScrollPane(MsgText);
		

		JListOnlineModel=new DefaultListModel();
		OnlineList=new JList(JListOnlineModel);
		OnlineList.setBorder(BorderFactory.createTitledBorder("Online friends:"));
		OnlineList.setCellRenderer(new OnlineIconCellRenderer());
		OnlineScroll=new JScrollPane(OnlineList);

		OnlineList.addMouseListener(new MouseAdapter(){
		   public void mouseClicked(MouseEvent e){

			   int index;
			   User tempuser;
			   DiagFrame tempDiagframe;

			//if(e.getSource()==OnlineList){

			   if(e.getClickCount()==2){

System.out.println("In OnlineList double click");//要是能显示说明不需要if(e.getSource()==OnlineList)

			   	index=OnlineList.locationToIndex(e.getPoint());
			  	System.out.println("doubclick on OnlineList:"+index);
				
				if(-1==index){
					String sex=myself.getSex()?"男":"女";
					String info="姓名: "+myself.getUserName()+"\n"+"性别:"+sex+"\n"+"职位:"+myself.getJob()+"\n"+"邮箱:"+myself.getEMail()+"\n"+"电话:"+myself.getTel()+"\n"+"IP:"+myself.getIpAddr()+"\n";
					JOptionPane.showMessageDialog(ClientFrame.this,
						info,
						"Information",
						JOptionPane.INFORMATION_MESSAGE);
					return;	
				}//if(-1==index)


			//双击后背景恢复正常
			//((OnlineIconCellRenderer)OnlineList.getComponent(index)).setBackground(OnlineList.getBackground());
//System.out.println("双击后背景恢复正常");		

				 tempuser=client.indexToUser(true,index);//找到Client中OnlineUsers的条目

//Jlist中条目与OnlineUsers和OfflineUsers中条目保持一致(下标严格对应)保证返回值不会为null
//不过为保证严格安全还是对null进行检查

				 if(tempuser==null) return ;

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

				 if(tempDiagframe==null){

System.out.println("准备创建但点对话框,在线用户列表,性别:"+tempuser.getStrSex());

					tempDiagframe=new DiagFrame(ClientFrame.this,myself,tempuser,true);
					DiagFrames.put(tempuser.getRegName(),tempDiagframe);
				 }
				
				 tempDiagframe.setVisible(true);
			   }//if(e.getClickCount()==2)
			//}//if(e.getSource==OnlineList)

		   }//public void mouseClicked(MouseEvent e)
		});
		
		JListOfflineModel=new DefaultListModel();
		OfflineList=new JList(JListOfflineModel);	
		OfflineList.setBorder(BorderFactory.createTitledBorder("Offline friends:"));
		OfflineList.setCellRenderer(new OfflineIconCellRenderer());
		OfflineScroll=new JScrollPane(OfflineList);

		OfflineList.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e){
			   int index;
			   User tempuser;
			   DiagFrame tempDiagframe;

			//if(e.getSource()==OfflineList){
	
			   if(e.getClickCount()==2){

System.out.println("In OfflineList double click");//要是能显示说明不需要if(e.getSource()==OfflineList)

			   	 index=OfflineList.locationToIndex(e.getPoint());
			  	 System.out.println("doubclick on OfflineList:"+index);


				if(-1==index){
					String sex=myself.getSex()?"男":"女";
					String info="姓名: "+myself.getUserName()+"\n"+"性别:"+sex+"\n"+"职位:"+myself.getJob()+"\n"+"邮箱:"+myself.getEMail()+"\n"+"电话:"+myself.getTel()+"\n"+"IP:"+myself.getIpAddr()+"\n";
					JOptionPane.showMessageDialog(ClientFrame.this,
						info,
						"Information",
						JOptionPane.INFORMATION_MESSAGE);
					return;	
				}//if(-1==index)


				 tempuser=client.indexToUser(false,index);//找到Client中OfflineUsers的条目





//Jlist中条目与OnlineUsers和OfflineUsers中条目保持一致(下标严格对应)保证返回值不会为null
//不过为保证严格安全还是对null进行检查

				 if(tempuser==null) return ;

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

				 if(tempDiagframe==null){

System.out.println("准备创建但点对话框,离线用户列表,性别:"+tempuser.getStrSex());

					tempDiagframe=new DiagFrame(ClientFrame.this,myself,tempuser,false);
					DiagFrames.put(tempuser.getRegName(),tempDiagframe);
					
				 }
				
				 tempDiagframe.setVisible(true);
			   }//if(e.getClickCount()==2)
			//}//if(e.getSource==OfflineList)
			}
		});


		ModifyBtn=new JButton("ModifyInfo");
	
		ModifyBtn.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){

				InfoMsgBox InputPersonalInfo = new InfoMsgBox(ClientFrame.this);
				InputPersonalInfo.show();
			}
		});



		LayoutUtil.add(contentPane,PubMsgScroll,GridBagConstraints.BOTH,GridBagConstraints.CENTER,1,1,0,0,5,4);
		LayoutUtil.add(contentPane,MsgScroll,GridBagConstraints.BOTH,GridBagConstraints.CENTER,1,1,0,4,5,4);
		LayoutUtil.add(contentPane,OnlineScroll,GridBagConstraints.BOTH,GridBagConstraints.CENTER,0,1,5,0,2,4);
		LayoutUtil.add(contentPane,OfflineScroll,GridBagConstraints.BOTH,GridBagConstraints.CENTER,0,1,5,4,2,4);
		LayoutUtil.add(contentPane,ModifyBtn,GridBagConstraints.BOTH,GridBagConstraints.CENTER,1,1,0,8,8,1);
		
		//窗体居中设置
		setSize(500,500);
		setResizable(false);
		//setVisible(true);

		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				client.logoff();
				System.exit(0);				
			}//public void windowClosing(WindowEvent e)
		});//addWindowListener(new WindowAdapter()

}//public ClientFrame()




public User getMyself(){
	return myself;
}//public User getMyself()


public void Init(Vector OnlineUsers,Vector OfflineUsers,Vector PubMsglist,Vector Msglist){
	PublicMessage tempPubMsg;
	Message tempmsg;
	User tempUser;
	int len;

System.out.println("in clientframe Init()");
System.out.println("PubMsgText.isShowing()="+PubMsgText.isShowing());
System.out.println("PubMsgText.isDisplayable()="+PubMsgText.isDisplayable());

System.out.println("OnlineUsers.size()="+OnlineUsers.size());
System.out.println("OfflineUsers.size()="+OfflineUsers.size());
System.out.println("PubMsglist.size()="+PubMsglist.size());
System.out.println("Msglist.size()="+Msglist.size());

	myself=this.client.getmyself();

	len=OnlineUsers.size();
	for(int i=0;i<len;i++){
	   tempUser=(User)OnlineUsers.get(i);
	   JListOnlineModel.addElement(tempUser);
	}
	

	len=OfflineUsers.size();
	for(int i=0;i<len;i++){
	   tempUser=(User)OfflineUsers.get(i);
	   JListOfflineModel.addElement(tempUser);
	}   

⌨️ 快捷键说明

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