Java课程设计【网络聊天】-发送表情
2009-03-10 17:10
218 查看
在大一聊天的课程设计中,遇到一个问题~~~~~发送图片表情的问题
下面单介绍发送表情
表情是存储在客户端本地的(每个客户端都有,你要用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");
}
}
}
效果:用的是梦幻的表情~~~呵呵
![](http://static10.photo.sina.com.cn/bmiddle/5093c14a44d4e5fd5ea79)
PS:1.貌似解析信息的时候有个很好的方法split
没用过,有空补上
2.发送多行就一行一行发,然后一行一行处理
我晕,当时交的时候太简陋了,刚及格【有点郁闷】,好歹是自个花了两礼拜写的
这礼拜重新写了个,在增加功能,发文件,语音什么的~~~~
下面单介绍发送表情
表情是存储在客户端本地的(每个客户端都有,你要用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");
}
}
}
效果:用的是梦幻的表情~~~呵呵
PS:1.貌似解析信息的时候有个很好的方法split
没用过,有空补上
2.发送多行就一行一行发,然后一行一行处理
我晕,当时交的时候太简陋了,刚及格【有点郁闷】,好歹是自个花了两礼拜写的
这礼拜重新写了个,在增加功能,发文件,语音什么的~~~~
相关文章推荐
- java在线聊天项目1.3版设计好友列表框功能补充,因只要用户登录就发送一串新列表,导致不同客户端好友列表不同问题
- 计算机网络课程设计(四)--发送数据包
- 周报——网络资源教学平台设计之课程管理系统E-R图及数据表
- Java UDP使用Socket进行网络聊天(1)
- java 网络 TCP客户端 发送数据 Socket
- Java微信二次开发之12-表情发送的实现-与文本消息的对接
- Android 仿QQ和微信发送表情 聊天框架
- java课程设计-小狗来回跑问题
- java网络编程中向指定URL发送GET POST请求示例
- java(课程设计之记事本界面部分代码公布)
- 知乎爬虫---总结我的Java课程设计
- 黑马程序员--Java基础学习之网络编程(TCP、UDP、Socket、模拟发送和接收数据)
- C#网络课程设计
- java课程设计-文本编辑器
- 粤嵌为零基础学员量身订造JAVA网络培训课程
- Java 小样例:图书馆课程设计(Java 8 版)
- Java课程设计(2018版)
- [置顶] JAVA课程设计——华容道小游戏
- java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
- php+js+mysql设计的仿webQQ-<7>聊天消息的发送与刷新