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

📄 chatarea.java

📁 这是关于java编程的一本书书的源代码 一共有15章
💻 JAVA
字号:
import java.awt.*;
import java.net.*;
import java.awt.event.*;
import java.io.*;
import java.util.Hashtable;

public class ChatArea extends Panel implements ActionListener,Runnable
{
  Socket  socket=null;                               
  DataInputStream in=null;                           
  DataOutputStream out=null;                         
  Thread threadMessage=null;                         
  TextArea 谈话显示区,私聊显示区=null;
  TextField 送出信息=null;
  Button 确定,刷新谈话区,刷新私聊区;
  Label  提示条=null;
  String name=null;                                  
  Hashtable listTable;                               
  List  listComponent=null;                          
  Choice privateChatList;                             
  int width,height;                                   
  public ChatArea(String name,Hashtable listTable,int width,int height)
  {
    setLayout(null); 
    setBackground(Color.orange);
    this.width=width;
    this.height=height;
    setSize(width,height);
    this.listTable=listTable;
    this.name=name;
    threadMessage=new Thread(this); 
    谈话显示区=new TextArea(10,10);
    私聊显示区=new TextArea(10,10);
    确定=new Button("送出信息到:");
    刷新谈话区=new Button("刷新谈话区");
    刷新私聊区=new Button("刷新私聊区");
    提示条=new Label("双击聊天者可私聊",Label.CENTER);
    送出信息=new TextField(28);
    确定.addActionListener(this);
    送出信息.addActionListener(this);
    刷新谈话区.addActionListener(this);
    刷新私聊区.addActionListener(this);
    listComponent=new List();
    listComponent.addActionListener(this);           
    privateChatList=new Choice();
    privateChatList.add("大家(*)");
    privateChatList.select(0);                      
   
    add(谈话显示区);
    谈话显示区.setBounds(10,10,(width-120)/2,(height-120)); 
    add(私聊显示区);
    私聊显示区.setBounds(10+(width-120)/2,10,(width-120)/2,(height-120));
    add(listComponent);
    listComponent.setBounds(10+(width-120),10,100,(height-160));
    add(提示条);
    提示条.setBounds(10+(width-120),10+(height-160),110,40);
    Panel  pSouth=new Panel();
    pSouth.add(送出信息);
    pSouth.add(确定);
    pSouth.add(privateChatList);
    pSouth.add(刷新谈话区);
    pSouth.add(刷新私聊区); 
    add(pSouth);
    pSouth.setBounds(10,20+(height-120),width-20,60);
  
  }
 public void setName(String s)
  {
    name=s;
  }
 public void setSocketConnection(Socket socket,DataInputStream in,DataOutputStream out)
  {
    this.socket=socket;
    this.in=in;
    this.out=out;
    try
         { 
           threadMessage.start();
         }
    catch(Exception e)
         {
         } 
  }
 public void actionPerformed(ActionEvent e)
  {
   
   if(e.getSource()==确定||e.getSource()==送出信息)
     {  
        String message="";
        String people=privateChatList.getSelectedItem();
        people=people.substring(0,people.indexOf("("));     
        message=送出信息.getText();
        if(message.length()>0)
        {
         try {
               if(people.equals("大家"))
                 {
                   out.writeUTF("公共聊天内容:"+name+"说:"+message);
                 }
               else
                 {
                   out.writeUTF("私人聊天内容:"+name+"悄悄地说:"+message+"#"+people);
                 } 
             }
         catch(IOException event)
             {
             }
        }
     }
    else if(e.getSource()==listComponent)
     {
       privateChatList.insert(listComponent.getSelectedItem(),0);
       privateChatList.repaint();
     }
    else if(e.getSource()==刷新谈话区)
     {
       谈话显示区.setText(null);
     }
    else if(e.getSource()==刷新私聊区)
     {
       私聊显示区.setText(null);
     }
  }  
 public void run()                    
  {
     while(true)
        {
           String s=null;
            try
               { 
                 s=in.readUTF();               
                 if(s.startsWith("聊天内容:")) 
                    {
                      String content=s.substring(s.indexOf(":")+1);
                      谈话显示区.append("\n"+content);
                    }
                 if(s.startsWith("私人聊天内容:")) 
                    {
                      String content=s.substring(s.indexOf(":")+1);
                      私聊显示区.append("\n"+content);
                    }
                 else if(s.startsWith("聊天者:"))
                    {
                     String people=s.substring(s.indexOf(":")+1,s.indexOf("性别"));
                     String sex=s.substring(s.indexOf("性别")+2);
                     
                     listTable.put(people,people+"("+sex+")"); 
                     
                     listComponent.add((String)listTable.get(people)); 
                     listComponent.repaint();                       
                    } 
                 else if(s.startsWith("用户离线:"))
                    {
                      String awayPeopleName=s.substring(s.indexOf(":")+1);
                      listComponent.remove((String)listTable.get(awayPeopleName));
                      listComponent.repaint();
                      谈话显示区.append("\n"+(String)listTable.get(awayPeopleName)+"离线"); 
                      listTable.remove(awayPeopleName);
                    }
                 Thread.sleep(5); 
               } 
            catch(IOException e) 
               {
                  listComponent.removeAll();
                  listComponent.repaint(); 
                  listTable.clear();
                  谈话显示区.setText("和服务器的连接已中断\n必须刷新浏览器才能再次聊天");
                  break;
               }
            catch(InterruptedException e)
               {
               }
        }
  }
}

⌨️ 快捷键说明

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