基于 TCP/IP 的群聊系统
1.简介
课程设计项目,Java实现一个基于TCP/IP的群聊系统,要求支持消息以及文件传输,同时需要在GUI界面看到在线列表。
项目本身很简单,写写服务端客户端再加上Message这个类,用上多线程就完了。GUI的话用Swing包里的组件来写就完成了。
后续我对项目额外做了点美化,导入flatlaf这个包,仿Telegram风格,同时实现使用内网穿透工具进行不同局域网的互联等功能。
2. 代码部分
这里放一下仿Telegram风格的代码,项目的完整代码请在这里查看:
package com.chat.client;
import javax.swing.*;
import java.awt.*;
public class BubblePanel extends JPanel {
private boolean isSelf;
private Color bgColor;
public BubblePanel(String sender, String text, String time, boolean isSelf) {
this.isSelf = isSelf;
this.bgColor = isSelf ? new Color(238, 255, 222) : Color.WHITE;
setOpaque(false);
setLayout(new BorderLayout(8, 2));
JPanel contentPanel = new JPanel();
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
contentPanel.setOpaque(false);
if (!isSelf && sender != null) {
JLabel lblSender = new JLabel(sender);
lblSender.setFont(new Font("Microsoft YaHei UI", Font.BOLD, 12));
lblSender.setForeground(new Color(43, 130, 202));
contentPanel.add(lblSender);
contentPanel.add(Box.createVerticalStrut(2));
}
JLabel lblText = new JLabel(text);
lblText.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 13));
lblText.setForeground(new Color(34, 34, 34));
contentPanel.add(lblText);
JLabel lblTime = new JLabel(time);
lblTime.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 10));
lblTime.setForeground(new Color(150, 160, 170));
lblTime.setHorizontalAlignment(SwingConstants.RIGHT);
setBorder(BorderFactory.createEmptyBorder(6, 10, 5, 10));
add(contentPanel, BorderLayout.CENTER);
add(lblTime, BorderLayout.SOUTH);
}
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(bgColor);
g2.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 10, 10);
if (!isSelf) {
g2.setColor(new Color(225, 230, 235));
g2.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 10, 10);
}
g2.dispose();
super.paintComponent(g2);
}
}
3. 程序构建
跨局域网互联看着唬人,实际上就是让用户自己输内网穿透工具映射的端口和IP。而为了让我和朋友能直接打开程序使用而不是每次从IDEA启动,我先把项目服务端和客户端的main方法全部构建成jar,再用launch4j把jar打包成.exe文件。
4. 效果展示


本文总阅读量: 次
▲
▼