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

📄 client.java

📁 聊天室源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		bSave.setForeground(Color.blue);	
		bAgain.setForeground(Color.blue);
		bCls.setForeground(Color.blue);		
		lCount.setFont(fontstr);
		cUser.setFont(fontstr);		
		taUser_Message.setFont(new Font("宋体",Font.PLAIN,13));		
		lUser_List.setForeground(Color.orange);
		lUser_Message.setForeground(Color.orange);
		lSend_Message.setForeground(Color.black);
		lChat_User.setForeground(Color.black);
		lSend_Message.setForeground(Color.orange);
		lUser_total.setForeground(Color.black);
		lCount.setForeground(Color.black);
		cUser.setForeground(Color.black);		
		liUser_List.setBackground(Color.white);
		taUser_Message.setBackground(Color.white);		
		pChat.add(bCls);
	    pChat.add(bExit);	   
	    pChat.add(bAgain);
	    pChat.add(bSend);
	    pChat.add(bSave);
	    pChat.add(lUser_List);
	    pChat.add(lUser_Message);
	    pChat.add(lSend_Message);
	    pChat.add(lChat_User);
	    pChat.add(lUser_total);
	    pChat.add(lCount);
	    pChat.add(liUser_List);
	    pChat.add(taUser_Message);
	    pChat.add(tMessage);
	    pChat.add(cUser);
	     pChat.add(l);	   	    
	    fChat.addWindowListener(new Windowclose());                 //设置监听事件
	    bCls.addActionListener(this);
	    bExit.addActionListener(this);
	    bSend.addActionListener(this);
	    bSave.addActionListener(this);	   
	    liUser_List.addActionListener(this);
	    tMessage.addActionListener(this);
	     bAgain.addActionListener(this);	      
		Thread thread = new Thread(this);                           //启动聊天页面信息刷新线程                                                      
      	thread.start();      			
	    fChat.setSize(700,700);                                     //设置面版大小
	    fChat.setVisible(true);                                     //设置为可见
	    fChat.setResizable(false);                                  // 设置最大化不可开启 	  
    	scrnsize=toolkit.getScreenSize();                           //将窗口定位在屏幕中央
    	fChat.setLocation(scrnsize.width/2-fChat.getWidth()/2,
    	                 scrnsize.height/2-fChat.getHeight()/2);	
	}                                                                //界面结束
	
	public void run()
	{   
	    int message_counter=0;                                       //初始化消息数
	    int user_total=0;
	    boolean first_enter=true;                                    //判断是否刚刚登录
	    boolean user_find;                                           //判断是否找到用户
	    Vector user_exit=new Vector();	                             //设置退出
try
{
 for(;;)
{
	Socket toServer1;
	toServer1=new Socket(ipserver,2008);
	Message messobj=new Message();                        //将信息发往服务器
    ObjectOutputStream streamtoserver=new ObjectOutputStream
    (toServer1.getOutputStream());
	streamtoserver.writeObject((Message)messobj);			 
   ObjectInputStream streamfromserver=new                 //收来自服务器的信息
   ObjectInputStream(toServer1.getInputStream());
   messobj=(Message)streamfromserver.readObject();										  
   if (first_enter)                                       //刷新聊天信息列表
	{
	 message_counter=messobj.chat.size();                  //如果刚登陆
	 first_enter=false;                                    //屏蔽该用户登陆前的聊天内容
	}				 							 
	for (int i=message_counter;i<messobj.chat.size();i++)
	{
	 Chat temp=(Chat)messobj.chat.elementAt(i);            //使用动态数组计量消息
	 String temp_message;			 	    			 	       
	if (temp.chatUser.equals(login_name))                  //判断
	{
	if(temp.chatToUser.equals(login_name))
	{
	temp_message="系统提示你:请不要自言自语"+"\n\n";     
	}
	   else
		{
	  if (!temp.whisper)                                   //消息对象发送对象处理
	    {
	 	temp_message="你对"+temp.chatToUser+"说:"+temp.chatMessage+"\n\n";	
		 }
	else
	   {
	   temp_message="你对"+temp.chatToUser+"说:"+temp.chatMessage+"\n\n";
		 }	
	}	
	}
	 else
		{
	  if(temp.chatToUser.equals(login_name))                            //已登录用户验证
	   {
	  if (!temp.whisper)   
	    {
	     temp_message=temp.chatUser+"对你说:"+temp.chatMessage+"\n\n";	 // 好友发来消息显示
	    }
     else
         {
       	temp_message=temp.chatUser+"对你说:"+temp.chatMessage+"\n\n";    
        }
        }
     else
        {
      if (!temp.chatUser.equals(temp.chatToUser))   
        {
     if (!temp.whisper)   
   	    {
        temp_message=temp.chatUser+"对"+temp.chatToUser+"说:"+temp.chatMessage+"\n\n";
   	    }
    else
   	    {
	   	temp_message="";
   	    }
        }
    else
        {
   	    temp_message="";
           }
         }
     }
 	     taUser_Message.append(temp_message);                         //在面版中添加显示消息
 	     message_counter++;
  } 			   			    			     
    liUser_List.clear();                                              //刷新在线用户
    for (int i=0;i<messobj.userOnLine.size();i++)
    {
	   String User=(String)messobj.userOnLine.elementAt(i);
  	   liUser_List.addItem(User);
   	}			   	
   	Integer a=new Integer(messobj.userOnLine.size());
   	lCount.setText(a.toString());			   				   	 
   	if(messobj.userOnLine.size()>user_total)                          //显示用户进入聊天室的信息
   	{
    String tempstr=messobj.userOnLine.elementAt
    (messobj.userOnLine.size()-1).toString();
    if(!tempstr.equals(login_name))
		{
	taUser_Message.append(tempstr+"来了"+"\n\n");
   		}
   	}			   	   	
  	if(messobj.userOnLine.size()<user_total)                          //显示用户离开聊天室的信息
   	{
   	    for(int b=0;b<user_exit.size();b++)
	   	    {
   	        user_find=false;
   	        for(int c=0;c<messobj.userOnLine.size();c++)
   	        {	
     if(user_exit.elementAt(b).equals(messobj.userOnLine.elementAt(c)))   //动态数组计量好友退出
            {
   	      user_find=true;
   	        break;
            }			   		        
   		    } 
   		    if(!user_find)                                      //没有发现该用户
   		    {
	    	if(!user_exit.elementAt(b).equals(login_name))
	        {
	        taUser_Message.append(user_exit.elementAt(b)+"走了"+"\n\n");
	        }
	   		    }
   	    	}	
    	}
	   	user_exit=messobj.userOnLine;			                //关闭对象流 	
	   	user_total=messobj.userOnLine.size();			    			    
	    streamtoserver.close();
	    streamfromserver.close();
	    toServer1.close();			
			    thread.sleep(1000);                              //等待
		    }   
		}
		catch (Exception e)
		{
			JOptionPane jop = new JOptionPane();
			jop.showMessageDialog(null,"不能连接服务器!");
			System.out.println(e);
		}	
	}   
    public void actionPerformed(ActionEvent e)               //监听按钮响应            
    {
    	Object source=(Object)e.getSource();    	
    	if(source.equals(bCls))
    	{
    	    messageClear();                                  //清空
    	    tMessage.requestFocus();                        //光标指向文本处
    	}
    	if(source.equals(bExit))                             //退出
    	{
    	    exit();    	    
    	}
    	if(source.equals(bSend))                            //发送消息
    	{
    		sendMessage();
            tMessage.requestFocus();    
    	}
    	if(source.equals(bSave))                            //保存消息
    	{
    	    saveMessage();
    	    tMessage.requestFocus();                        //光标指向文本处	
    	}
    	if(source.equals(liUser_List))                      //双击列表框
    	{
    		changname();                                    //改变好友
    		tMessage.requestFocus();                        //光标指向文本处
    	}
    	if(source.equals(tMessage))
    	{
    		sendMessage();                                   //发送消息
    		tMessage.requestFocus();                        //光标指向文本处
    	}    	
    	if(source.equals(bAgain)) 
    	{
    	 
    	    new LoginPanel(serverip);	
    	}     	    
    }                                                              //监听窗口关闭响应
    class Windowclose extends WindowAdapter
    {
        public void windowClosing(WindowEvent e)           
        {
        	exit();
        }
    }        
    public void  messageClear()                        //"清屏"按钮
    {
        taUser_Message.setText("");	
    }      
    public void exit()                                  //"退出"按钮
    {
        Exit1 exit=new Exit1();
        exit.exitname=login_name;                
        try                                             //发送退出信息
        {
          Socket toServer=new Socket(ipserver,2008);                                   
   ObjectOutputStream outObj=new ObjectOutputStream      //向服务器发送信息
   (toServer.getOutputStream());
   outObj.writeObject(exit);            
   outObj.close();                                        //关闭流
   toServer.close();    		
    		fChat.dispose();
        }
        catch(Exception e)
        {
        }
    }       
    public void sendMessage()                                               //"发送"按钮
    {
    	Chat chatobj=new Chat();    	
    	chatobj.chatUser=login_name;
    	chatobj.chatMessage=tMessage.getText();
    	chatobj.chatToUser=String.valueOf(cUser.getSelectedItem());
    	chatobj.whisper=chPrivateChat.isSelected()?true:false;
    	try                                                               	//向服务器发送信息
    	{
    	Socket toServer=new Socket(ipserver,2008);                          //创建套接字    		
    	ObjectOutputStream outObj=new ObjectOutputStream(toServer.getOutputStream());
    	outObj.writeObject(chatobj);    	    
        tMessage.setText("");                                             //清空文本框    	    
        outObj.close();                                                  //关闭流
    	toServer.close();                  	    
    	}
    	catch(Exception e)
    	{
    	}
    }  
    public void saveMessage()                        //"保存"按钮
    {
    	try
    	{
   	FileOutputStream  fileoutput=new FileOutputStream("message.txt",true); //建立文件输入输出流
    String temp=taUser_Message.getText();                                  //
    System.out.println(temp);
    fileoutput.write(temp.getBytes());                                      //文件写为字节抛出
    fileoutput.close();                                                     ////输出关闭                                                                                                                                                   
        }
        catch(Exception e)
        {
        	System.out.println(e);
        }      
    }                                                                      
  	public void changname()                                             //将所选用户添加到cUser中
	{
		boolean key = true;
		String selected = liUser_List.getSelectedItem();		
		for(int i = 0; i < cUser.getItemCount(); i++)                   // 添加用户计数
		{
		   if(selected.equals(cUser.getItemAt(i)))
	       {
			   key = false;
		       break;
		   }
		}
		if(key == true)
		{
		   cUser.insertItemAt(selected,0);
		}
		cUser.setSelectedItem(selected);   
    }    	
}

⌨️ 快捷键说明

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