fupeisen

导航

统计

11月24日

虚拟聊天室实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:

1. 新的具体聊天室中发送的图片大小不得超过20M

2. 新的具体聊天室中发送的文字长度不得超过100个字符。

3. 新的具体会员类可以发送图片信息和文本信息。

4. 新的具体会员类在发送文本信息时,可以在信息后加上时间。

修改客户端测试类,注意原有系统类代码和客户端代码的修改。

实验要求:

1. 提交源代码;

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

 

class NewChatRoom {

    private ArrayList<String> messages = new ArrayList<>();

    private JTextArea chatArea;

 

    public NewChatRoom(JTextArea chatArea) {

        this.chatArea = chatArea;

    }

 

    public void sendTextMessage(NewMember member, String text) {

        if (text.length() <= 100) {

            String message = member.getName() + ": " + text;

            messages.add(message);

            displayMessage(message);

        } else {

            System.out.println("Text message exceeds 100 characters. Not sent.");

        }

    }

 

    public void sendImage(NewMember member, int imageSize) {

        if (imageSize <= 20) {

            String message = member.getName() + " sent an image.";

            messages.add(message);

            displayMessage(message);

        } else {

            System.out.println("Image size exceeds 20M. Not sent.");

        }

    }

 

    private void displayMessage(String message) {

        chatArea.append(message + "\n");

    }

}

 

class NewMember {

    private String name;

 

    public NewMember(String name) {

        this.name = name;

    }

 

    public String getName() {

        return name;

    }

 

    public void sendTextMessage(NewChatRoom chatRoom, String text) {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        String currentTime = dateFormat.format(new Date());

 

        String formattedText = text + " - " + currentTime;

        chatRoom.sendTextMessage(this, formattedText);

    }

 

    public void sendImage(NewChatRoom chatRoom, int imageSize) {

        chatRoom.sendImage(this, imageSize);

    }

}

 

public class ChatGUI extends JFrame {

    private NewChatRoom chatRoom;

    private JTextField messageField;

 

    public ChatGUI() {

        setTitle("Simple Chat Room");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new BorderLayout());

 

        JTextArea chatArea = new JTextArea();

        chatArea.setEditable(false);

        JScrollPane scrollPane = new JScrollPane(chatArea);

        add(scrollPane, BorderLayout.CENTER);

 

        JPanel bottomPanel = new JPanel();

        bottomPanel.setLayout(new BorderLayout());

 

        messageField = new JTextField();

        bottomPanel.add(messageField, BorderLayout.CENTER);

 

        JButton sendButton = new JButton("Send");

        sendButton.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                sendMessage();

            }

        });

        bottomPanel.add(sendButton, BorderLayout.EAST);

 

        add(bottomPanel, BorderLayout.SOUTH);

 

        chatRoom = new NewChatRoom(chatArea);

 

        setSize(400, 300);

        setVisible(true);

    }

 

    private void sendMessage() {

        String message = messageField.getText().trim();

        if (!message.isEmpty()) {

            NewMember member = new NewMember("User");

            member.sendTextMessage(chatRoom, message);

            messageField.setText("");

        }

    }

 

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override

            public void run() {

                new ChatGUI();

            }

        });

    }

}

 

posted on   20214073-付沛森  阅读(9)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示