`
Severus-zhang
  • 浏览: 4867 次
  • 性别: Icon_minigender_1
  • 来自: 长沙->北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

通信程序中图文混排与表情选择的实现

 
阅读更多

      最近在做的一个仿QQ的通信项目中,需要实现QQ聊天界面中的表情选择和显示功能,纠结了许久,终于解决。
首先对这个流程进行分析:点击单人聊天界面上的表情按钮后,自动弹出表情选择框,单击表情框中图标,聊天界面编辑区添加上表情包中指定的表情图标,点击发送按钮后,程序获取编辑区的图文混合信息,按照通信协议传输该信息,接收方收到之后,解析该图文信息,区分开图标和文本信息,然后在己方聊天显示界面上显示表情包中指定的图标。分析清楚后就开始一步步着手解决。
      在实现过程中纠结于以下问题:1、如何显示无边框的表情选择框,表情图标如何选择和显示??2、JTextField和JTextArea都只能用于显示文本,如何在界面的显示和编辑区域中插入图标?选用何种组件?3、点击发送按钮,发送消息时,程序如何获取显示组件中图文混发的消息,图文混合消息如何表示?4、接收消息方如何解析和重现图文混发的消息?
      查找资料后,终于找到了实现了类似Word功能的文本组件JTextPane和无边框的显示窗体JWindow,问题解决大半,剩下的就是学习其中的方法实现需要的功能。我的方法算法效率比较差,但是功能勉强实现了。
      首先找到无边框的窗体JWindow,就可以将表情作为按钮的图标布局到JWindow中,然后将表情的名称作为 ActionCommand,对JWindow中的所有按钮进行监听,至此,在聊天界面上点击表情选择按钮,就可以弹出表情选择窗。
     然后对于JTextPane jt,插入文本的方法两种,直接调用jt.setText()设置显示文本。以及先通过jt.getStyledDocument()获取StyledDocument doc,再用doc.insertString(doc.getLength(), str, null)在光标位置处插入指定文本str.插入图标方法为insertIcon(new ImageIcon(lis.get(i)))。需要注意的就是要保证插入文本或图标时光标的位置都在上次输入之后的位置,可以通过setCaretPosition(doc.getLength())方法来调整光标到当前输入的最后位置。当点击发送按钮,需要获取图文信息时,可以调用Element e=doc.getCharacterElement(int position)来获取指定位置处的元素样式,e.getName()得到样式名,分别为"content"和"icon",由此便可区分编辑区每个可编辑位置处的文本类型,jt.getText().length()获取到编辑区编辑内容的长度,空格,字符和图标都占一个。而对于图标,使用icon.getDescription()即可获取图标的来源路径信息,根据需要设置路径,即可作为标记。如此,便解决了图文混排和混排信息区分识别的问题。    

       

 
       表情选择,图文混排在一个项目中只是很小的问题,但是回想纠结过的几天还是很有感慨,最开始的情况就是大体思路想通了,但是觉得组件是小事,始终很浮躁,只想找现成的代码参考,不愿意扎扎实实去看文档。虽然知道问题其实就集中在一个组件上,但是沉不下心,所以很奇怪的在空格和图标在getText()方法中如何区分的问题上纠结了半天,后来稍微认真学习了JTextPane,发现那些纠结的问题全都有现成的方法解决。由此及彼,学习还是要扎扎实实,沉的下心,长远看才会有收获。

      

 
     啰嗦许多,关于JTextPane的示例详细学习,可以参见http://www.java2s.com。新博客,旨在改掉懒惰,拖延症,欢迎批评灌水,谢过。

 

  • 大小: 89.4 KB
  • 大小: 86.5 KB
分享到:
评论
3 楼 luliangy 2012-01-27  
哈哈,我在做斗地主游戏,借鉴一下哈!
2 楼 firefly_zp 2011-10-19  
很不错,学习要稳扎稳打啊。呵呵。
1 楼 贾懂凯 2011-10-19  
不错,推荐试试swixat,一个java swing的框架

相关推荐

    IOS实现图文混排

    在实际应用中,开发者可以使用该机制来实现各种图文混排的功能,例如实现聊天应用程序中的表情发送功能,或者实现社交媒体应用程序中的图文混排功能。 知识点: 1. IOS 中的图文混排机制 2. 使用 NSString 和 ...

    实现带网络图片的html图文混排.docx

    在本文中,我们学习了如何使用MyImageGetter来实现图文混排,特别是当中包含网络图片时。通过重写getDrawable方法,我们可以使用Glide加载网络图片,并将其与文本混排在一起。这项技术可以广泛应用于移动应用程序中...

    Android 图文混排 ,文字围绕图片

    1. 自定义View:对于更复杂的需求,开发者可能会选择自定义View或ViewGroup来实现图文混排。通过重写onDraw()方法,可以直接在Canvas上绘制文字和图片,从而获得更高的定制灵活性。 2. Drawables与Intrinsic尺寸:...

    AS3聊天表情即图文混排

    在本文中,我们将深入探讨AS3(ActionScript 3)中的图文混排技术,特别是如何在聊天应用中实现表情插入。ActionScript 3是Adobe Flash Professional、Flash Builder等工具所用的主要编程语言,广泛用于创建交互式...

    Flex 4 中 实现 图文混排

    在Flex 4中实现图文混排是一个常见的需求,特别是在创建用户界面或开发富互联网应用程序时。Flex 4,也称为Spark架构,提供了更强大的布局管理器和组件库,使得图文混排变得更加灵活和可控。本篇文章将深入探讨如何...

    Flex3 中 实现 图文混排

    完美解决Flex3 中 实现 图文混排 。

    微信小程序图文混排、JS伪交互样例下载

    在这个"微信小程序图文混排、JS伪交互样例下载"资源中,我们可以深入学习到如何在微信小程序中实现丰富的用户体验和功能。 首先,我们要了解图文混排的概念。在网页或应用设计中,图文混排是指将文字和图片有效地...

    Android 通过 WebView 与js 简单交互实现图文混排与查看大图功能

    总结,Android中的WebView结合JavaScript交互能实现丰富的用户体验,包括图文混排和查看大图等功能。开发者需要熟练掌握WebView的使用,注意安全性和性能优化,以构建高质量的Android应用。通过上述知识点,你可以在...

    ios-textKit实现图文混排最简单的实现.zip

    接下来,我们将深入探讨TextKit以及如何在TextView中实现图文混排。 1. **TextKit框架概述** TextKit是iOS和OS X中的核心文本渲染技术,由三部分组成:`NSAttributedString`, `NSLayoutManager`, 和 `...

    Android 原生实现图文混排编辑器

    在Android开发中,创建一个能够实现图文混排编辑器是一项挑战性的任务,因为这涉及到复杂的布局管理和图片处理。本文将详细解析如何使用Android原生控件来构建这样一个功能丰富的编辑器,支持网络图片和本地图片的...

    AS3图文混排,图文混排

    AS3编写的图文混排,AS3编写的图文混排,AS3编写的图文混排

    unity实现图文混排功能.zip

    在Unity游戏开发中,图文混排(Text with Image Mixing)是一项重要的功能,它允许开发者在文本中嵌入图片,如表情符号,以增加交互性和视觉吸引力。本项目"unity实现图文混排功能.zip"提供了TextInlineSprite-...

    UGUI 图文混排demo

    此Demo旨在展示如何在Unity中有效地实现图文混排,使得开发者能够轻松地创建出包含表情、图片和其他元素的文字内容。 在Unity中实现图文混排通常涉及到以下关键知识点: 1. **TextMeshPro**: Unity 5.6之后引入了...

    android开发 自定义图文混排控件

    在实现自定义图文混排控件的过程中,以下几点是关键: 1. 数据结构设计:为了方便地管理和展示图文数据,通常会创建一个自定义的数据模型类,如`PictureTextBean`,包含文字和图片信息,以及它们的位置和大小等属性...

    简单的图文混排

    在实际操作中,我们有多种软件可以选择来实现图文混排。例如,Microsoft Word、Adobe InDesign、Canva等都是常用的工具。Word以其便捷性和广泛性,成为初学者的首选;InDesign则更适合专业设计师,提供更精细的排版...

    word操作练习题图文混排

    在Word文档中,图文混排是一项重要的技能,它涉及到如何有效地将文字与图像结合,以创建清晰、有吸引力的布局。在"word操作练习题图文混排01"的资源包中,你将找到一系列练习素材,包括文本、图片以及截图,这些都是...

    驱动测试VS图文混排

    在IT行业中,驱动测试和图文混排是两个重要的概念,它们分别服务于软件的稳定性和用户体验。下面将详细探讨这两个主题。 驱动测试,全称为“驱动程序测试”,是软件测试的一个重要分支,主要针对计算机硬件设备的...

    安卓自定义图文混排

    在Android中,最基础的图文混排可以通过`TextView`的`drawableStart`、`drawableEnd`属性来实现,它们可以在文本前后添加图片。但这种方式功能有限,无法满足复杂的设计需求,比如图片和文字交错排列、图片居中等。 ...

    as3实现的图文混排组件

    在AS3中实现图文混排组件,主要涉及到以下几个核心概念: 1. **RichTextField**:这是AS3中的一个类,专门用于处理富文本内容,包括基本的文本格式、颜色、字体等,以及更复杂的功能如图片嵌入。RichTextField类...

    聊天界面图文混排

    图文混排是指在文本内容中插入图像、表情符号或其他图形元素,使得信息呈现方式更加多元化。在聊天界面中,用户可以发送文字消息的同时,插入表情包或图片,让聊天内容更具趣味性和表达力。 1. **表情混排**:表情...

Global site tag (gtag.js) - Google Analytics