🎨 Swing 共享画板 (Shared Whiteboard) 项目介绍
一、 项目概述
“Swing共享画板” 是一个基于 Java Swing GUI 库和 Socket 网络通信开发的分布式多人在线协作画板应用程序。项目采用了经典的 C/S(Client-Server)架构,支持一个管理员(服务端)创建画板房间,多名普通用户(客户端)加入房间进行实时的同步绘画和交流。该项目利用 JSON 格式进行轻量化网络数据传输,保证了多端画板内容和状态的高效、一致同步。
二、 技术栈
- 开发语言: Java (基于 JDK 21 编译)
- GUI 框架: Java Swing
- UI 主题: FlatLaf (使用了第三方现代扁平化暗色主题库
,界面更加美观)FlatDarkLaf - 网络通信: Java 原生 Socket 网络编程 (TCP/IP)
- 数据交换格式: JSON (运用
库进行数据序列化与解析)json-simple-1.1.1 - 构建工具: Maven
三、 核心功能与特性
1. 👥 C/S 多人联机协作体系
- 房间创建: 服务端负责创建白板并监听指定端口,不仅提供后端网络服务,也是房主(管理员)的客户端界面。
- 连线加入: 用户启动客户端后,输入服务端 IP、端口及自己的用户名即可加入共享画板房间。
- 实时同步互通: 任何一方在画布上的鼠标动作都会被封装为 JSON 指令并广播给所有在线用户,实现几乎无延迟的“所见即所得”。
2. 🖌️ 丰富的绘画工具集
- 基础图形: 支持快速绘制 直线 (Line)、圆形 (Circle)、三角形 (Triangle) 和矩形 (Rectangle)。
- 自定义文本: 支持在画布任意坐标点击并直接输入自定义文本 (Text)。
- 多尺寸橡皮擦: 提供三种尺寸(小、中、大)的橡皮擦功能 (Eraser) 供创作者灵活修改。
- 色彩调色板: 接入原生 Color Chooser 画板选色器,支持无限色彩变换。
3. 📁 画板文件管理 (管理员特权)
- 新建画板 (New): 清空当前画布,并一键同步清空所有客户端的画布。
- 引入底图 (Open): 可以将本地图片加载到画板作为底板,所有客户端同步生效,可在此基础之上进行二次联合创作。
- 保存作品 (Save / Save As): 可以将当前所有人的联合创作进度导出保存为
图片格式到本地计算机。.png
4. 💬 社交互动与房间管理
- 实时聊天室 (Chat): 侧面板配备了带有绝对时间戳的实时文字聊天框,用户可以边画边交流。
- 在线列表: UI 面板实时展示当前在线和断开连接的用户名单。
- 剔除用户 (Kick): 服务端管理员专属权限,一旦遇到恶意涂鸦或干扰协作的用户,管理员可以随时在用户列表中选中并将其踢出画板。
四、 项目技术亮点
- 基于命令历史的回放极简同步: 相比于在网络上实时截取并传输笨重的图片像素流,底层
Canvas 巧妙地使用了
集合记录所有的绘画历史指令(如形状、起始点、色彩大小等)。新成员加入或重绘时,瞬间完成“指令回放”,极大降低了带宽占用并防止了卡顿。List<JSONObject> history - 现代化的外观体验: 摒弃了千篇一律的 Java Swing 灰白原生或 Windows 风格,引入
使软件具备了符合当下审美的深色 UI 风格与流畅交互。FlatDarkLaf - 高健壮性与模块化设计: 程序拥有完善的入参校验模块 (
) 提升运行稳定性,并且代码有着清晰的目录分层控制(GUI 视图、Socket 服务与连接池、实体类相互解耦),便于后续二次开发与维护。ParameterValidate