仿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);那时候图片插入的位置总是东插一个,西插一个,有了这个方法后,这个问题就解决了。

  

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

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

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

 

 

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以帮您解答这个问题。您可以使用 Flask-Mail 扩展和 QQ 邮箱 SMTP 服务器来实现发送验证码的功能。具体步骤如下: 1. 安装 Flask-Mail 扩展 您可以使用 pip 工具在命令行中运行以下命令来安装 Flask-Mail 扩展: ``` pip install Flask-Mail ``` 2. 配置 Flask-Mail 在 Flask 应用程序中,您需要配置 Flask-Mail 扩展。以下是一个配置示例: ``` from flask import Flask from flask_mail import Mail app = Flask(__name__) app.config['MAIL_SERVER'] = 'smtp.qq.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_SSL'] = True app.config['MAIL_USERNAME'] = 'your_qq_email@qq.com' app.config['MAIL_PASSWORD'] = 'your_qq_email_password' mail = Mail(app) ``` 请替换示例中的 `MAIL_USERNAME` 和 `MAIL_PASSWORD` 为您自己的 QQ 邮箱账号和密码。 3. 实现发送验证码的功能 您可以在 Flask 应用程序中编写一个路由来实现发送验证码的功能。以下是一个示例代码: ``` from flask import Flask, jsonify, request from flask_mail import Message import random app = Flask(__name__) # 配置 Flask-Mail 扩展 app.config['MAIL_SERVER'] = 'smtp.qq.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_SSL'] = True app.config['MAIL_USERNAME'] = 'your_qq_email@qq.com' app.config['MAIL_PASSWORD'] = 'your_qq_email_password' mail = Mail(app) # 发送验证码路由 @app.route('/send_code', methods=['POST']) def send_code(): # 获取接收验证码的邮箱地址 email = request.form.get('email') # 生成验证码 code = str(random.randint(100000, 999999)) # 发送邮件 msg = Message('验证码', sender=app.config['MAIL_USERNAME'], recipients=[email]) msg.body = '您的验证码为:' + code mail.send(msg) return jsonify({'code': code}) ``` 在上述示例代码中,我们通过 POST 请求的方式传递需要发送验证码的邮箱地址,然后使用 `random` 模块生成 6 位随机数作为验证码,然后用 Flask-Mail 扩展将验证码发送到指定的邮箱地址。 以上就是使用 Flask-Mail 扩展和 QQ 邮箱 SMTP 服务器实现发送验证码的步骤。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iteye_4145

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值