构建在线白板的正确方法

Nik*_*har 5 java swing

我正在构建一个白板,它将有一个服务器(教师)和客户(学生).老师会在他身边画一些东西,这些东西将与学生完全相同.

  1. 我想知道我应该用哪个组件来绘图?我目前正在使用JPanel.
  2. 我希望Server的屏幕被复制到客户端上,那么为什么这可能是正确的方法呢?
    • 选项1:我将JPanel保存为图像,并通过套接字发送,并将其加载到客户端的屏幕上,它也始终只保存背景图像,而不是用户绘制到它上面的图像.要么
    • option2:服务器和客户端的JPanel尺寸都是一样的,所以我只是发送每次通过套接字绘制的新坐标,用一些协议来了解它是橡胶还是铅笔..

任何帮助,将不胜感激.

And*_*son 6

  1. 使用JComponent,除非你需要添加其他组件,然后使用JPanel.
  2. 发送绘图对象而不是图像.它比推动图像的带宽更少.还要实现协议以允许"添加或删除"绘制的元素.这样你只需要将最新的对象发送给每个客户端.这种方法还具有为最终用户(学生)提供更多使用的额外好处.您可以稍后添加功能以允许学生调整/添加/删除图形中的元素.

更新

如果我在老师的一边画一条线,同样应该发生在孩子的屏幕上,现场,所以有一种实时绘画的感觉..

那么你肯定想要尽可能减少带宽密集的路线.那将是瓶颈.

..有一个JFrame,我有2个JPanels,1个用于绘图,1个用于按钮.

在这种情况下,将绘图组件设为a JComponent并使用JPanel(或a JToolBar)保留控件.

..什么是"可能的最小带宽密集路线"?

按带宽顺序并忽略极端情况,它们将按此顺序减少:

  1. 发送全屏图像:
    1. 高品质的JPEG
    2. PNG.
    3. 高压缩JPEG
  2. 发送部分屏幕图像:
    1. 高品质的JPEG
    2. PNG.
    3. 高压缩JPEG
  3. 通过发送直接处理绘图元素:
    1. 每个更新的绘制对象的完整列表
    2. 当前对绘制元素的修改,添加,删除,依赖于客户端来保存模型并根据需要进行调整.

如果有任何混淆,我建议选项3.2.