Правильный метод для создания онлайн доски - PullRequest
5 голосов
/ 01 апреля 2012

Я строю доску, на которой будет сервер (учитель) и клиенты (студенты). Учитель нарисует что-то на своей стороне, что будет показано ученикам точно так же.

  1. Я хочу знать, какой компонент я должен использовать для рисования? В настоящее время я рисую на JPanel.
  2. Я хочу, чтобы экран сервера копировался на клиентах, так что для этого может быть правильным способом сделать это?
    • option1: я сохраняю JPanel как изображение, отправляю через сокет и загружаю его на экран клиента, также всегда сохраняется только фоновое изображение, а не то, что нарисовал на нем пользователь. OR
    • option2: размеры JPanel и сервера, и клиента одинаковы, поэтому я просто отправляю новые координаты, нарисованные каждый раз через сокет, с некоторым протоколом, чтобы понять, резина это или карандаш.

Любая помощь будет оценена.

Ответы [ 2 ]

6 голосов
/ 01 апреля 2012
  1. Используйте JComponent, если вам не нужно добавлять другие компоненты, затем используйте JPanel.
  2. Отправляйте объекты чертежа, а не изображение.Это меньше пропускной способности, чем нажатие изображения.Также реализуйте протокол, чтобы разрешить «добавление или удаление» нарисованных элементов.Таким образом, вам нужно только отправить последние объекты каждому клиенту.Этот подход также имеет дополнительное преимущество, заключающееся в большей пользе для конечного пользователя (студента).Вы можете добавить функциональность позже, чтобы позволить ученику корректировать / добавлять / удалять элементы на чертеже.

Обновление

, если я рисую линию на стороне учителя,то же самое должно происходить с экраном ребенка, в режиме реального времени, поэтому возникает ощущение рисования в реальном времени ..

Тогда вы определенно хотите пойти по пути с наименьшей пропускной способностью.Это будет узким местом. У

.. есть JFrame, на котором у меня есть 2 JPanels, 1 для рисования, 1 для кнопок.

В этом случае установите для компонента рисования JComponent и оставьте JPanel (или JToolBar) для элементов управления.

..каков будет этот «маршрут с наименьшей пропускной способностью»?

В случае пропускной способности и игнорирования угловых случаев они уменьшатся приблизительно в следующем порядке:

  1. Отправка полноэкранного изображения:
    1. Высокое качество JPEG
    2. PNG.
    3. Высокая степень сжатия JPEG
  2. Отправка части-изображение на экране:
    1. Высокое качество JPEG
    2. PNG.
    3. Высокое сжатие JPEG
  3. Работа с элементами чертежа напрямую, отправка:
    1. Полный список нарисованных объектов при каждом обновлении
    2. Текущие модификации, добавления, удаления нарисованных элементов, полагаясь на клиента, чтобы он удерживал модель и корректировал ее по мере необходимости.

В случае путаницы, я рекомендую вариант 3.2.

4 голосов
/ 01 апреля 2012

Используйте Robot.createScreenCapture () и транслируйте весь экран учителя.

для захвата:

sendBuffer[index++] = robot.createScreenCapture(new Rectangle(0,0,1360,768));

для отображения:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(receiveBuffer[index], 0, 0, jFrame.getWidth(), jFrame.getHeight(), null);
    receiveBuffer[index++]=null;
}

Вам нужно будет изменить масштаб в приемнике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...