1.信息发送
判断当前输入框是否为空,是否确定聊天对象
if(owner!=null&&owner.getId()!=null) {
String message0 = this.messageField.getText();
Date queueDate = new Date();
SimpleDateFormat queueDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now = queueDateFormat.format(queueDate);
if (!message0.isEmpty() && !message0.equals(null) || !message0.equals("")) {
MessaAge message = new MessaAge();
message.setIsperson("1");
message.setMessageType(MarkTool.PrivateChat);
message.setSender(user.getId());
message.setGetter(owner.getId());//聊天对象
message.setContent(message0);
message.setSendimage(owner.getImage());
message.setSendTime(now);
ClientConnectServerThread.save(owner,message);
Platform.runLater(() -> {
System.err.println(now);
System.err.println(user.getId());
System.err.println(owner.getId());
ChatBubble chatBubble = new ChatBubble(message0.length() * 15, message0, true, user, now);
this.MessageListview.getItems().add(chatBubble);
this.messageField.clear();
this.MessageListview.scrollTo(this.MessageListview.getItems().size() - 1);
});
}
}
2.表情包的使用
点击按钮查看表情包
FlowPane emojiPane = new FlowPane();
emojiPane.setHgap(5.0);
emojiPane.setVgap(5.0);
// 创建一个指向表情图片文件夹的 File 对象
File emojiFolder = new File("E:\\java.xmu\\demo1\\src\\main\\image1\\static");
//获取文件夹中所有文件的文件名数组。
String[] emojiFiles = emojiFolder.list();
if (emojiFiles != null) {
String[] var5 = emojiFiles;
int var6 = emojiFiles.length;
//遍历表情文件夹中的每个文件。
for(int var7 = 0; var7 < var6; ++var7) {
String emojiFile = var5[var7];
File file = new File("E:\\java.xmu\\demo1\\src\\main\\image1\\static/" + emojiFile);
try {
//将文件路径转换为 URL 字符串。
String imageUrl = file.toURI().toURL().toExternalForm();
// 创建图像对象。
Image emojiImage = new Image(imageUrl);
//创建图像视图对象,设置其大小为 30x30 像素,并为其添加点击事件处理程序。
ImageView imageView = new ImageView(emojiImage);
imageView.setFitWidth(30.0);
imageView.setFitHeight(30.0);
//点击图像时触发方法,将 emojiFile 作为参数传递,这里的 emojiFile 是当前循环中的文件名。包装文件名加【】
imageView.setOnMouseClicked((events) -> {
this.handleEmojiClicked(emojiFile);
});
//将 ImageView 添加到 emojiPane 中。
emojiPane.getChildren().add(imageView);
} catch (MalformedURLException var13) {
MalformedURLException e = var13;
e.printStackTrace();
}
}
}
//创建一个滚动面板,并将 emojiPane 设置为其内容。
ScrollPane scrollPane = new ScrollPane(emojiPane);
scrollPane.setFitToWidth(true);
scrollPane.setFitToHeight(true);
StackPane root = new StackPane(new Node[]{scrollPane});
Stage stage = new Stage();
Scene scene = new Scene(root, 380.0, 300.0);
stage.setScene(scene);
stage.setResizable(false);
stage.setX(400.0);
stage.setY(400.0);
stage.show();
效果如下:
3.常用语的使用
通过控件ComboBox的使用,实现如上操作。
this.Phrases.setItems(this.options);
this.Phrases.setOnAction((event) -> {
String selectedPhrase = (String)this.Phrases.getValue();
if (selectedPhrase != null && !selectedPhrase.isEmpty()) {
String currentText = this.messageField.getText();
this.messageField.setText(currentText + selectedPhrase + "\n");
}
});
4.图片的发送
首先在自己电脑中选择自己想要发送的图片,然后转化为字节数组发送服务端保存。
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("选择图片");
fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter[]{new FileChooser.ExtensionFilter("图片文件", new String[]{"*.png", "*.jpg", "*.gif"})});
File selectedFile = fileChooser.showOpenDialog((Window)null);
图片发送显示具体代码:
Platform.runLater(() -> {
ChatBubble chatBubble = null;
try {
chatBubble = new ChatBubble(age, true, owner);
} catch (IOException e) {
throw new RuntimeException(e);
}
this.MessageListview.getItems().add(chatBubble);
Platform.runLater(() -> {
this.MessageListview.scrollTo(this.MessageListview.getItems().size() - 1);
});
效果如下:
接收图片还在创作中,预计下次总结完成图片的发送接收保存,及文字和表情包的一同发送。