聊天(文字,表情包,图片)

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);
                    });

效果如下:

接收图片还在创作中,预计下次总结完成图片的发送接收保存,及文字和表情包的一同发送。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值