2009-06-30 3 views
1

Я настроил JPanel, который отображает большую сложную диаграмму. В зависимости от размера данных в paintComponent() может потребоваться несколько минут. Я ищу стратегию:PaintComponent принимает длительное время, связывает Swing Event Dispatch Thread

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

Я исследовал это немного, и мне интересно, если правильная стратегия заключается в использовании SwingWorker создать фоновый поток и привлечь к BufferedImage , Таймеры будут обрабатывать обновления статуса. Элементы класса будут иметь статус.

Есть ли я на правильном пути?

ответ

2

Вам необходимо изучить SwingWorker. Вы должны сделать рендеринг диаграммы в отдельном потоке. SwingWorker поможет в этом.

Чтобы начать работу с многопоточным параллелизмом, у солнца есть great tutorial, который должен оказаться очень полезным.

1

Используйте фоновое изображение, которое обновляется специальной рабочей нитью. Затем в методе paintComponent() JPanel просто нарисуйте это изображение. Стратегия называется двойной буферизацией. У вас есть фоновое и фоновое изображение. Если отдельная нить заканчивает покраску данных, тогда установите это изображение как переднюю и переднюю нагрузку в качестве фона. Недействительный JPanel и продолжите рисовать на обратном изображении, если это необходимо.

Смежные вопросы