【文章声明】 鄙人是大一计算机专业的小白一枚,此博客仅记录项目开发过程,此文章为期末提交的实训任务之一。 如有不当还恳请大佬指出,也希望大佬可以提供更好的思路。
【第一部分:创建消息表和消息类】
【第一步——创建消息表】
主要字段:sender发送人,receiver接收者、message消息内容、send_time发送时间、is_read是否阅读。
【第二步——创建消息类】
把数据表对应的字段匹配好数据类型并设为私有属性,一键生成构造函数和getter、setter方法。
【第二部分:设计出发送面板JPanel】
【第一步——聊天窗口布局好发送面板JPanel】
<运行看看效果>
【第二步——做个简单判断,文本框内有文字才能启用发送按钮】
<运行看看效果>
【第三部分:完善发送按钮的功能】
【第一步——实现插入数据的功能】
创建MessgaeDAO类,先绑定好数据库,再写一个填满message数据表的方法;
和之前UserDao的insert方法是基本一样的,只是这次的参数多一些。
【第二步——写好点击发送按钮的条件】
先判断一下用户是否选择了好友,再对发送的内容做一个限制(数据库里是varchar(200))
再准备好用户名、接受好友、点击时间、发送消息,然后创建一个Messages对象(消息是否已读就先暂时为0),最后调用刚刚写好的insertMessage方法。
【第三步——重写发送方法】
如果好友在线,我们直接把信息发送给好友。之前弄的发送线程已经没有什么作用了......因为选择的好友是不确定的,而且调用很麻烦,可以删掉了。我们在MessageDAO重新写一个发送方法
【第四步——应用发送方法】
因为没有服务器,这程序始终只能在本机运行。所以ip地址和端口我都是写死的。
ip地址就是我电脑的,端口用之前UserDAO的获取用户端口方法就行。
<测试效果>
【第四部分:创建聊天面板】
【第一步——写出聊天面板大概轮廓】
【第二步——将聊天面板放到聊天窗口里面】
这是之前好友列表面板的点击事件,之前只有把选中好友的用户名赋值给聊天面板中全局变量friendName。这次我们要先把好友的用户名先赋值给局部变量a,再判断这个a是不是上次选中的好友。如果不是上次选中的那个好友,那就把这个a赋值给friendName,由于friendName的初始值是"",所以第一次执行的时候不用关闭先前的chatPanel面板,反之,就先关闭先前的面板,再创建当前选中好友的面板。
<运行测试效果>
【第三步——在MessageDAO类补充获取未读消息,设置消息已读的方法】
基本条件:给用户名和好友名
创建一个List<String>,得到String类型的List,到时候再遍历循环得到String类型的单条消息,挨个把消息添加到聊天面板就行。
【第四步——完善聊天面板,把得到好友消息的方法弄到一个每秒执行一次的线程里面,并且把得到的消息列表逐个提取单条消息并添加到聊天面板】
这是我用ai生成并修改的完整代码
【第五步——在聊天窗口里点击发送时,就要给当前的聊天面板添加自己发的消息并应用右对齐的样式】
<最后展示一下效果>
到这里就先告一段落了,今天下午这个作业就要提交,还是有很多遗憾的:
1、添加好友里面没有向对方申请就默认通过,对方要有拒绝成为好友的权利。
2、接收线程名存实亡,没有实现好友在线时 线程接收到消息立即显示到好友聊天面板里。
3、没有未读消息的通知,未读消息只有用户打开好友界面的时间,这个时间是完全不准的。
4、好友ip和端口是写死的,实现的通信范围太过有限。
5、用户没有上传头像、修改昵称的功能,好友列表里也应该要有未读消息的条数以便提醒用户。
我会争取在暑假的时候对这个项目重新完善的(除了4需要服务器外,但我也会学习)
【项目总结】
自己还是能力不足,在做整个聊天程序时,尤其是聊天消息怎么传到面板上这块知识点,我是一片空白的。也因为时间不足了,本篇同时也是最难最重要的一篇很多代码是AI给的大概框架,我再去加以完善。AI给的代码通常有着问题,尤其是在自己知识盲区时要调试很久,有时候一个功能需要花一两个小时解决。要表扬自己的是,这个时候这么枯燥火大还是坚持到了胜利。
虽然这个聊天程序做的马马虎虎,但我认为整个程序80%都是自己一步一步的写,实在触碰到知识盲区了才不停的在AI给的代码缝缝补补。在这一点,我认为我比我其他同学要优秀很多。
最后也是我感触最深的,AI写代码真的很快也很规范。但通常还是有漏洞和逻辑上与自己思路的不一致,修改这个过程大多还是避免不了。人类社会的发展就是把做事的效率提高,所以运用AI是未来的大势所趋。自己能和AI“有多少默契”,将决定了自己未来的高度。在运用AI完善代码这点上,我认为还是不单依赖AI,自己要对基础知识有理解,做东西的思路要清晰,才能不被AI误导。