`
huangfeiNetJava
  • 浏览: 40802 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

仿QQ图片发送实现

 
阅读更多

    这两天断断续续把仿QQ通信系统完善,在没有一点基础的情况下完成图片的发送,还是很受鼓舞的。下面是一些具体细节和实现:

      首先,我们在窗体上添加一个“图片”按钮,然后添加一个监听器,当我们点击这个按钮时,弹出图片选择器,我的图片选择器是用JList实现的,我们可以再新建一个窗体,将JList添加到窗体上,JList里面添加图片元素就完成了第一步。

      代码实现:

 

      // 列表模型,添加元素
    DefaultListModel listModel = new DefaultListModel();
    ImageIcon icon1 = new ImageIcon("images/发火.png");
    ImageIcon icon2 = new ImageIcon("images/哭泣.png");
    ImageIcon icon3 = new ImageIcon("images/我晕.png");
    ImageIcon icon4 = new ImageIcon("images/2008328111941.png");
    ImageIcon icon5 = new ImageIcon("images/2008328111958.png");
    ImageIcon icon6 = new ImageIcon("images/200832811204.png");
    ImageIcon icon7 = new ImageIcon("images/200832811209.png");
    listModel.addElement(icon1);
    listModel.addElement(icon2);
    listModel.addElement(icon3);
    listModel.addElement(icon4);
    listModel.addElement(icon5);
    listModel.addElement(icon6);
    listModel.addElement(icon7);
    // 根据模型实例化JList
    final JList pictureList = new JList(listModel);
    // 设置JList单选属性
    pictureList
      .setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    // 元素水平显示
    pictureList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
    // 元素自动换行
    pictureList.setVisibleRowCount(-1);
    // JList是轻量级组件,要把它添加到窗体上
    final JFrame jf1 = new JFrame();
    jf1.setLocationRelativeTo(null);
    jf1.setSize(96 * 4 + 30, 192 + 50);
    jf1.getContentPane().add(pictureList);
    jf1.setUndecorated(true);// 去边框,调用方法就行了
    jf1.setVisible(true);
    pictureList.setBounds(0, 0, 96 * 4 + 20, 192 + 50);

 

JList(ListModel dataModel)
          根据指定的非 null 模型构造一个显示元素的 JList
JList(Object[] listData)
          构造一个 JList,使其显示指定数组中的元素。

以上为JList常用的两种构造方法,我用的是模型参数,这样便于扩展。

   当然,会发现点击JList的元素后没有反应,因为我们没有给它添加事件监听,我们可以添加双击事件,单击事件等,切莫认为JList有默认的事件监听。

  

   以下为一些零散的知识点,但是零散就是精华啊:

   1.要把一个窗体关闭,我们用dispose(),而不是用setVisible(false)。

   2.JList里的元素是有顺序的,我们可以用getSelectedIndex()得到选中元素的索引(从0开始)。

   3.要得到JList里面的对象,可以用getSelectedValue()方法。

  

   至此,JList已经完成,但是图片发送怎么搞呢?

   首先,我们用JTextPane来接收图片(JTextArea为纯文本编辑,不可插入图片),JTextPane可以编辑文字,插入图片,设置文字格式等,功能比JTextArea强大。

   然后,JTextPane里面有insertICon(Icon icon)的方法可以插入图片。

   在JTextPane中添加文字,我用的是StyledDocument类,这个类可以从JTextPane的getStyledDocument()获得,是用来编辑文字和设置文字格式的。

   这里有一点是要注意的,就是插入光标的位置,有一个方法可以让光标移到JTextpane末尾,setCaretPosition(length);那时候图片插入的位置总是东插一个,西插一个,有了这个方法后,这个问题就解决了。

  

   都知道,到现在我们还没有实现在两个客户端之间发送表情。

   我用的是类似腾讯的表情发送方法:

   如果大家留心,会发现别人发来的表情会存到你的硬盘的一个地方(具体自己找找),然后再取出图片文件发送到你的聊天窗口上,就是这个流程,思路有了,细节就的自己实现了,将聊天系统的文件发送功能的代码稍微改一下就行了……

 

 

分享到:
评论

相关推荐

    仿QQ图片表情发送

    【标题】"仿QQ图片表情发送"涉及到的IT知识点主要集中在Android应用开发领域,特别是关于图像处理和聊天功能的实现。QQ作为一款流行的即时通讯软件,其图片表情发送功能是用户体验的重要组成部分。以下是对这个主题...

    仿QQ发送表情

    "仿QQ发送表情"这一主题涉及到的是在自己的应用程序中实现类似QQ的聊天表情功能。QQ作为一款广受欢迎的即时通讯软件,其表情功能丰富多样,使得用户可以更生动、直观地表达情感。以下将详细介绍如何在项目中实现这一...

    仿QQ聊天 MFC 实现

    在本项目中,“仿QQ聊天 MFC 实现”是一个基于MFC(Microsoft Foundation Classes)库构建的简单聊天应用程序,旨在模仿QQ的某些基本功能。MFC是微软为Windows平台提供的C++类库,它简化了Windows应用程序开发,尤其...

    Android高仿qq发送图片中编辑图片功能

    总结来说,实现Android高仿QQ发送图片中的编辑功能,需要深入理解Bitmap、Canvas、Paint、Matrix、MotionEvent以及多点触控处理等Android图形和触摸事件相关的知识。通过合理的代码设计和组织,可以创建出一个功能...

    高仿qq发送图片时"编辑图片"功能

    高仿qq图片编辑,支持多点触控放大缩小移动,涂鸦,选择涂鸦颜色,画笔粗细,橡皮擦擦除功能

    仿QQ微信高德地图实现发送位置

    这个项目"仿QQ微信高德地图实现发送位置"旨在创建一个集成定位、地图浏览、周边信息查询以及位置分享等功能的系统。下面将详细介绍这些功能的实现方式。 1. **定位服务**:在Android或iOS平台上,我们可以利用系统...

    DUILIB实现的仿QQ聊天对话窗口

    这个实例"仿QQ聊天对话窗口"将展示如何利用Duilib库来构建一个类似QQ聊天的对话界面。在这个项目中,我们将深入理解Duilib的核心概念、组件以及如何通过源码实现一个功能齐全的聊天窗口。 首先,Duilib是基于...

    仿QQ空间上传图片

    在IT行业中,"仿QQ空间上传图片"是一个常见的功能需求...以上是实现"仿QQ空间上传图片"功能涉及的主要技术点。实际开发中,还需要考虑用户体验、性能优化、适应不同浏览器等因素,以提供一个稳定、高效的上传图片功能。

    仿QQ 图片展示 动态

    2. **无限滚动( Infinite Scroll)**:仿QQ图片展示可能包含无限滚动的设计,即当用户滚动到底部时,会自动加载更多图片。这需要JavaScript配合Ajax或者Fetch API来实现,向服务器发送请求获取更多数据,然后动态...

    仿QQ上传多张图片和评论的例子

    "仿QQ上传多张图片和评论的例子"是一个典型的案例,它涉及到的技术点主要包括图片批量上传、图片预览以及用户交互设计。下面将详细讲解这些知识点。 1. **批量上传**: - 文件API:HTML5引入了File API,使得在...

    仿qq聊天界面及发送动态表情

    本项目旨在模仿QQ的聊天界面设计,并实现动态表情的发送功能,使得用户可以在自定义的应用中享受到类似QQ的聊天体验。 首先,我们要了解即时通讯(IM)的基本原理。即时通讯系统通常包括客户端和服务器两部分。...

    在VS6.0环境下实现仿QQ多功能聊天

    在本文中,我们将深入探讨如何在Visual Studio 6.0(VS6.0)环境下实现一个仿QQ的多功能聊天应用程序。这个项目旨在帮助学习者掌握MFC(Microsoft Foundation Classes)库,以及网络编程相关的技术,如文件传输和...

    仿QQ 微信 聊天界面 发送表情

    总的来说,仿QQ和微信聊天界面发送表情涉及到多方面的技术,包括UI设计、数据结构、网络编程、数据库操作、动画制作以及安全性等。开发者需要对这些领域都有一定的理解和实践,才能构建出高效且用户友好的聊天应用。

    仿QQ聊天系统(java swing)

    【标题】"仿QQ聊天系统(java swing)"是一个基于Java Swing开发的桌面应用程序,它模仿了QQ的基本功能,提供了用户间的实时通讯服务。Swing是Java标准版(J2SE)的一部分,用于构建图形用户界面(GUI)的库,具有...

    世上最高仿QQ2012的局域网聊天程序-完美好友列表(绝对经典)

    项目名称:CC2012(经典仿QQ实例源码) 下载文件内容: word格式说明书, CC2012-C#源码, MYCC数据库与查询文件脚本 源码实现功能: 1.仿QQ的CC登录界面采用网络美女恩典作为主题类型,界面更好看又养眼,界面相似度...

    Android应用源码高仿QQ客户端加服务端加数据库全套.zip

    这个“Android开发聊天访QQ界面源码”提供了一套实现此类功能的基础框架,包括核心组件和交互设计。以下将详细介绍其中的关键知识点: 1. **QQ聊天界面**: - 聊天界面是用户与应用的主要交互点,通常包含消息列表...

    android仿QQ空间里的本地上传图片浏览器

    在Android开发中,创建一个仿QQ空间的本地图片上传浏览器是一项常见的需求,它涉及到多个关键技术点,包括图片的检索、显示、预览以及选择功能。下面将详细解析这个项目所涉及的技术点。 首先,"android仿QQ空间里...

    Javscript+html仿QQ相册图片拖动排序

    在JavaScript和HTML的世界里,实现一个仿QQ相册的图片拖动排序功能是一项常见的交互设计需求。这个功能允许用户通过直观的手势操作调整图片的顺序,增强了用户体验,尤其是在展示个人相册或者进行图像管理时。以下...

    android仿QQ界面

    在QQDemo中,你会遇到如TextView(用于显示文本)、ImageView(显示图片)、Button(按钮)、EditText(输入框)和ListView(列表视图)等常见控件。这些控件的使用和自定义是理解Android UI设计的关键。 主页...

    自己瞎写的仿QQ程序

    【标题】:“自己瞎写的仿QQ程序” 这个标题暗示了一个个人项目,可能是一个初学者或者爱好者尝试模仿腾讯QQ的功能而创建的一个简易通讯软件。QQ是中国非常流行的一款即时通讯工具,它提供了聊天、文件传输、群组...

Global site tag (gtag.js) - Google Analytics