1.改进渲染
// 加载头像图像
InputStream inputStream = new ByteArrayInputStream(message.getFileBytes());
Image image = new Image(inputStream); // 第二个参数表示是否缓存图片,根据需要设置
imageView.setImage(image);
// 设置头像视图大小
imageView.setFitWidth(50);
imageView.setFitHeight(50);
// 聊天气泡效果的容器
Pane messageBubble = new Pane();
messageBubble.setStyle("-fx-background-color: #e0e9ff; -fx-background-radius: 10;");
messageBubble.setMaxWidth(200); // 设置最大宽度
messageBubble.setPadding(new Insets(5)); // 设置内边距
messageBubble.getChildren().add(messageText);
2.修改聊天bug
之前三个人聊天会有些问题
//根据message获取getterid,然后再得到对应先线程
ServerConnectClientThread serverConnectClientThread=ManageClientThreads
.getServerConnectClientThread(message.getGetter());
BaseService.GetM(message.getSender(),message);
ObjectOutputStream oos=new ObjectOutputStream(serverConnectClientThread.getSocket().getOutputStream());
oos.writeObject(message);//转发,如果客户不在线,可以保存到数据库,这样可以实现离线留言
Message message1=new Message();
message1=message;
ObjectOutputStream oos1=new ObjectOutputStream(socket.getOutputStream());
message1.setMesType(MessageType.MESSAGE_COMM_MES);
oos1.writeObject(message1);
3.完善了,添加好友与请求处理
添加好友改了表,好友申请表和好友列表,能实时更新,还有打开更新。
//界面初始化,我的好友
public static void sendupdateListFriend(String user1){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 2. 准备 SQL 查询语句
String sql = "SELECT * FROM friendstable WHERE User1 = ?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, user1); // 设置查询参数
// 3. 执行查询
rs = stmt.executeQuery();
// 4. 处理查询结果
while (rs.next()) {
//发送过去
//*****************************************************
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//界面,我的好友更新
public static void sendupdateListFriendEnd(String user1){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 2. 准备 SQL 查询语句
String sql = "SELECT * FROM friendstable WHERE User1 = ?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, user1); // 设置查询参数
// 3. 执行查询
rs = stmt.executeQuery();
// 4. 处理查询结果
while (rs.next()) {
String user2 = rs.getString("User2");
// 这里可以根据需要处理每行数据,例如打印输出或者其他逻辑处理
Message message1=new Message();
message1.setGetter(user2);
BaseService.GetM(user2,message1);
try {
//清空好友列表的
//*****************代码*****************
//好友
BaseService.sendupdateListFriend(user2);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
System.out.println(user1 +"初始好友列表有:"+user2);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
4.展示好友/我的资料
a.左边我的
b.右边好友的
5.聊天记录的建表
表名:chat_records
字段:Sender_id 发送者,Getter_id 接受者,SendTime发送时间,Message_type消息类型,
MessageContent 消息内容
6.聊天列表的刷新
a.这是与黄头的聊天
b.点击绿头时,这是绿头的聊天