Java网络白板
Java网络白板
网络白板
github项目:https://github.com/xclovehsy/whiteBoard
简介
项目需求
网络白板利用面相对象的思想设计适合可扩展的图形类集,利用java gui的mvc模式设计用户的绘图流程,利用java的套接字编程实现多客户端的数据共享方法,利用多线程机制实现绘图和数据传输的并发控制机制
实现功能
- 程序能够在窗体上根据用户的选择绘制不同形状(3个以上)的图形;
- 程序能够修改图形的属性(颜色和大小)和位置(利用鼠标移动选定的图形);
- 网络客户端的程序能够协同绘图(一个用户绘图其他用户均可见绘图效果);
- 程序能够以文件的形式保存绘图结果,下次启动程序后能够读取绘图结果文件再现绘图效果。
开发语言: Java
开发平台: Intellij IDEA 2021.2.2
项目设计
MVC设计流程

- GUIServer作为服务器接受客户端发送的图形数据,并将图形数据写入Data.txt文件中保存,同时将图形数据发送到各个客户端。
- 用户操作OpenGLApp画板。每画一个图形,程序会将数据发送到服务器。同时接受服务器传输的图形数据进行绘图。
- Data.txt文件用于保存图形数据,每当服务器开启时将会读取文件中上次保存的图形数据,并发送到各个客户端进行绘图。
程序架构设计
整体结构框架

该程序代码共有三个部分
- app为网络白板客户的主程序
- graph为图形包,里面包含了各种图形的数据,例如圆形、立方体、长方形等等。
- server负责服务器数据的接受与发送,以及数据的保存
- Data.txt用于保存图形数据
程序结构
OpenGLApp为网络白板客户端的主程序,负责GUI的显示,图形的绘制、发送数据、接受服务器发送的数据等,同时实现了1、根据用户的选择绘制不同形状(3个以上)的图形;2、修改图形的属性(颜色和大小)和位置(利用鼠标移动选定的图形)等功能。

Graph结构
- Shape类是图形类的抽象父类, 它包含一个抽象方法draw(),在他的派生类中都实现了draw()方法、各自的属性和属性的修改方法;
- Graphic是用来存储当前已有的对象和绘制已有的对象;
- Cube、Circle、Rectangle等均是Shape的子类。

Graph包类图如下(可见附件三)

Server结构
- GUIServer为服务器端,接受客户端发送的图形数据,并将图形数据写入Data.txt文件中保存。
- SeverThread多线程操作,可以并发的接受多个客户端的数据,并传送数据。

UML类图

项目展示
主界面

功能测试
绘制图形
程序能够在窗体上根据用户的选择绘制不同形状(3个以上)的图形;
该程序可以根据用户需要绘制不同的图形,通过点击面板上不同的图形按钮设置当前绘制的图形种类。例如圆形、椭圆、立方体、长方形、三角形等

#### 修改图形
程序能够修改图形的属性(颜色和大小)和位置(利用鼠标移动选定的图形);
可以选择不同的线条颜色以及填充颜色

网络协同
网络客户端的程序能够协同绘图(一个用户绘图其他用户均可见绘图效果);
打开sever.GUISever服务器程序,等待其他画板的连接

同时将网络白板客户端程序运行4次服务器连接上程序


- 在客户端1绘制图形将会传输其他客户端白板中。
- 在一个客户端中对图形进行修改,其他客户端的图形也会修改。即网络客户端的程序能够协同绘图(一个用户绘图其他用户均可见绘图效果);

更多功能请查看说明文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XcloveHsy's Blog!