Java课程设计【网络聊天】-发送表情

在大一聊天的课程设计中,遇到一个问题~~~~~发送图片表情的问题

下面单介绍发送表情

表情是存储在客户端本地的(每个客户端都有,你要用QQ的到QQ安装目录下找)
所以发送表情的思想:
    用户点击【表情】--- 跳出对话框---点击一个表情---在输入框里加入标识符我用的是#号+两位数字
    点【发送】---在接收端解析-----到本地寻找相应的表情---加载插入

 

大前提:在java中JTextArea不支持图片-----只能用JTextPane    而且JTextPane没有append()方法,只有getText(),setText()方法(setText()每次都盖掉以前的)
       要实现insertString()必须注意实现几行代码(即相当于append()添加而不是覆盖),下列用AAAAA标记出

 

首先,我在   D:/abcd/表情中加入了18个表情   #01 ---  #18  格式gif 注意:一定统一位数,以防识别错误  


JTextPane MsgArea=new JTextPane();//将接收显示区域设置为JTextPane

 

接受端的处理
 mywords = inputField.getText();//将接受到的数据转换为String
 manageInfo( mywords);//调用此方法处理String,分别解析出文字表情
 manageInfo("/n");//刷上分行


//处理接受到的信息的方法,加参String   通过此方解析表情文字
//有时间就分析下咯,没时间的话注意几行~~~~我用AAAAAA标记出了
 public void manageInfo(String info)
 {
  int length=info.length();//获取String 长度
  char[] every=new char[length];
  int count=0;//初始字符的位置,变化
  String path="D://abcd//表情 //";
  
             //实现insertString()的必要前提
  Document doc = MsgArea.getStyledDocument();//AAAAA   后面insertStirn                                 用到doc,insertIcon用到MsgArea
  SimpleAttributeSet attr=new SimpleAttributeSet();//AAAAA
            
              Boolean hadjin=false;
   
   for(int i=0;i
  {
   every[i]=info.charAt(i);
     if(every[i]=='#')  //识别信息中是否有#号
    hadjin=true;
  }
                             //开始玩拆字游戏
  
  for(int i=0;i
  {
   if(hadjin=false)
    break;
   if(every[i]=='#')
   {
    String str=null;
       str=info.substring(count,i);      //得到表情前的文字
    
    try{
     if(str!=null)
       doc.insertString(doc.getLength(), str, attr);//AAAA添加表情前的文字
    }catch(Exception e){
     System.out.println("a big error here");
    }
    
    
    String icName;
    icName=info.substring(i, i+3);                   //得到表情的名字  #01

    
    Icon ic=new ImageIcon(path+icName+".gif");//将表情转化为icon
    MsgArea.setCaretPosition(doc.getLength());

//获取当前的位置,将表情插入到当前最下~~~~

//没有此表情将出现在JTextPane的最上方,无法出现在当前行
   

   MsgArea.insertIcon(ic); //加入表情               
  

   count=i+3;//将字符起始位置跳到表情后第一位置
    }
  }
 
  if(count
  {
   String theLast=null;
   theLast=info.substring(count, length);
   try{
    
    doc.insertString(doc.getLength(), theLast, attr);
    }catch(Exception e){
     System.out.println("a big error here");
    }
  }
 }

效果:用的是梦幻的表情~~~呵呵

Java课程设计【网络聊天】-发送表情_第1张图片 

 

 

 

 

 

 

PS:1.貌似解析信息的时候有个很好的方法split

       没用过,有空补上

       2.发送多行就一行一行发,然后一行一行处理

         我晕,当时交的时候太简陋了,刚及格【有点郁闷】,好歹是自个花了两礼拜写的

         这礼拜重新写了个,在增加功能,发文件,语音什么的~~~~

你可能感兴趣的:(【Java】)