VasG
@VasG

Как в Java динамически подгружать изображения на JPanel?

Идёт пакетная обработка изображений, и хотелось бы, чтобы обработанная картинка выводилась тут же на JPanel.
Сейчас я использую примерно такой код:

for (int i = 0; i < photosToDetect.length; i++) {
        …
        jPanel1.setLayout(new FlowLayout());
        jPanel1.setVisible(false);
        jPanel1.add(new JLabel(new ImageIcon(scaledSource150x100)));
        jPanel1.setVisible(true);
        …
}

К сожалению, картинки выводятся только после завершения программы (цикла), и все одновременно.
Собственно и вопрос: как этого избежать? Как сделать так, чтобы изображения выводились именно в процессе выполнения, а не все сразу и только по завершении цикла?
  • Вопрос задан
  • 3648 просмотров
Решения вопроса 1
asm0dey
@asm0dey
Вам надо обработку изображений кинуть в отдельный поток (SwingWorker), а в основном только обновлять UI.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
leventov
@leventov
Попробуйте так
for (int i = 0; i < photosToDetect.length; i++) {
        …
        jPanel1.add(new JLabel(new ImageIcon(scaledSource150x100)), 0);
        jPanel1.repaint();
        …
}
Ответ написан
spiff
@spiff
Нужно делать это в отдельном потоке. Либо в SwingWorker, либо использовать SwingUtils.invokeLater()/SwingUtils.invokeAndWait();

Работать с компонентами UI не через EDT (Event Dispatch Thread) не правильно.
Ответ написан
Комментировать
@in_finiti
Илья Семенов
Ребята, у кого есть аккаунт на Хабре, напишите насчастному что у него нет repaint после загрузки в панель, да и что сама панель у него видна (visible=true) исключительно на этапе создания нового layout, а то у меня сердце разрывается от предложенных ответов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
06 мая 2024, в 10:17
15000 руб./за проект
06 мая 2024, в 10:02
3000 руб./за проект