Вопрос дизайна об обновлениях Swing GUI через PropertyChangeSupport - PullRequest
2 голосов
/ 04 ноября 2010

В прошлом я использовал PCS для обновления элементов Swing, которые отображали определенные поля, и все работало, как ожидалось. Однако сейчас я сталкиваюсь с относительно сложным (иными словами, ужасно разработанным) пользовательским интерфейсом, который отображает множество полей. Обновления данных поступают в виде пакетов (сетевой пакет, содержащий новые значения для примерно 1000 полей), и мне было интересно, как правильно обрабатывать что-то подобное.

Моя основная проблема заключается в том, что всякий раз, когда приходит пакет данных, запускается 1000 PropertyChangeEvents, вызывая 1000 .repaint () (или .revalidate () или что-то еще). Казалось, более разумный способ сделать что-то вроде "gui.stopRepainting (); fireAllThePropertyEvents (); gui.restartPainting ();". Есть ли способ сделать это, или есть лучший способ справиться с этим?

1 Ответ

3 голосов
/ 04 ноября 2010

Запрос на перерисовку передается в RepaintManager, который, в свою очередь, объединяет несколько запросов в одну перерисовку.

Мне кажется странным, что у вас есть 1000 полей одной формы.Если предположить, что это действительно так, то я сомневаюсь, что все 1000 будут видны одновременно.Я считаю, что RepaintManager будет рисовать только те, которые видны, поэтому накладные расходы могут быть не такими плохими, как вы думаете.

Я не знаю ни одного способа остановить перерисовку, но, возможно, вы могли бы сделать панель невидимой, сделайте обновления и затем сделайте его видимым снова.

Или, возможно, вы можете создать собственный RepaintManager, который ничего не делает.Вы устанавливаете его, делаете обновления, а затем переустанавливаете менеджер по умолчанию.

...