Как мне сделать так, чтобы моя краска для моего JFrame автоматически обновлялась? - PullRequest
0 голосов
/ 04 сентября 2011

В настоящее время у меня есть JFrame, который содержит JPanel.JPanel - это краска для моей программы.Краска означает все мои Graphics g .drawString вещи.Прямо сейчас он обновляет отображение только тогда, когда пользователь взаимодействует с JFrame, но я хочу, чтобы он постоянно обновлял (repaint()) сам БЕЗ цикла использования while (слишком большая загрузка ЦП).

Любойзнаете, как я мог это сделать?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2011

Я внедрил полнофункциональную систему интернет-чата, которая включает в себя рисование, чтобы увидеть, что вы и другие люди говорите

Похоже, вы пытаетесь "вытянуть" обновления изсервер, то вы можете использовать SwingWorker, чтобы запросить сервер об обновлениях, а затем отправить обновления в графический интерфейс.Вы бы хотели, чтобы SwingWorker находился в спящем режиме, поэтому он не будет непрерывно опрашивать сервер.

Для получения дополнительной информации прочитайте раздел из учебника Swing по Рабочие потоки и SwingWorker .

Может быть, лучший дизайн для сервера должен «проталкивать» обновления клиенту, а клиент должен прислушиваться к изменениям и затем перерисовывать себя.Возможно, вам поможет раздел All About Sockets .

Редактировать:

Вот старый код, который я не просматривал более 5 лет.«Клиент» - это простая текстовая панель, которая отправляет каждый набранный символ на «сервер».Затем сервер отправляет каждый символ любому другому клиенту, который подключен к серверу.Идея в том, что сервер имеет самый современный документ.Когда один клиент отправляет изменение, все другие клиенты получают уведомление об изменении.Таким образом, все клиенты всегда содержат одинаковые данные.Ваш код должен быть проще, поскольку вы будете отправлять на сервер только полные сообщения.Чтобы запустить код, откройте окно dos и введите:

java DocumentServer 1234

Запустится сервер, который прослушивает порт 1234

Затем откройтедругое окно и введите

java DocumentClient 1234 3

Это создаст 3 клиентских фрейма, которые подключаются к серверу.Ввод любого из кадров обновит сервер.

Вы можете получить zip-файл здесь:

http://www.camick.com/java/source/echo.zip

0 голосов
/ 04 сентября 2011

Что вам нужно сделать, это сообщить компоненту Swing, когда вы узнаете, что часть изображения на вашей панели изменилась. Обычный способ сделать это, как вы сказали, позвонить по номеру repaint(), и если вы знаете, что «недействительный» прямоугольник, вы также можете указать, что.

В зависимости от событий, вызывающих содержимое JPanel, вам необходимо изменить дизайн приложения, чтобы часть представления вашего приложения «прислушивалась» к изменениям в нижележащих данных и перерисовывалась при их возникновении. *

Существует еще один метод, называемый paintImmediately(), который может подойти для определенных ситуаций, но вам нужно описать немного больше своего сценария и в каких случаях вам необходимо постоянно перекрашивать.

...