Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> paintComponent() - как зафиксировать графику, исчезает предыдущая картинка 
:(
    Опции темы
marc13
Дата 22.8.2005, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.6.2005

Репутация: нет
Всего: нет



Подскажите, пожалуйста, как решить такую проблему (сорри за банальность проблемы, но я начинающий, и своими средствами не смог решить):

Мне нужно отображать в окне JFrame GIF файлы, один за другим (следующий по нажатию кнопки, например). Я хотел использовать метод paintComponent() и drawImage() в нем, но при загрузке следующей картинки, предыдущая сбрасывается.

Судя по тому, что я нашел в Инете, тут надо сохранять содержимое всей графики в буфер перед открытием каждого нового файла. Только нигде не было толковых примеров с пояснениями.

В конечном итоге, я построил все на основе JLabel с картинками в качестве бэкграунда, но хотелось бы разобраться, как заставить работать paintComponent().

Спасибо
PM MAIL   Вверх
batigoal
Дата 22.8.2005, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 7
Всего: 151



А в чем, собственно, задача? Тебе нужно рисовать следующую картинку поверх предыдущей? Или нужно рисовать их рядом друг с другом?
Добавлено @ 10:58
Пардон, проморгал. Там же написано - "один за другим".

Можно, например, переопределить метод paint таким образом, чтобы он брал картинки из массива и рисовал их - на первом шаге одну, на втором - первую и вторую, потом - первую, вторую и третью и т.д.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
marc13
Дата 22.8.2005, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.6.2005

Репутация: нет
Всего: нет



Согласен, так сработает, но, по сути, это мало чем отличается от использования JLabel с бэкграундом. Paint каждый раз все рисует заново.

Мой вопрос скорее можно переформулировать так: как сделать так, чтобы метод paint() не стирал предыдущую, уже имеющуюся графику, а рисовал поверх нее.

У меняв итоге получилось, но при сворачивании и разворачивании окна все предыдущее исчезает, остается только результат последнего рисования.
PM MAIL   Вверх
batigoal
Дата 22.8.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 7
Всего: 151



Мне кажется, метод "без стирания" неправилен. А если ты поместишь поверх какое-нибудь окно? На изображении останутся артефакты. Обычно такие вещи делают полной перерисовкой.

Это сообщение отредактировал(а) Lamer George - 22.8.2005, 12:54


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
marc13
Дата 22.8.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.6.2005

Репутация: нет
Всего: нет



Да, пожалуй, ты прав.

Спасибо!

И еще появился вопрос, связанный с тем же.

С точки зрения работы программы - ее ресурсоемкости и т.п. - стоит ли вообще пользоваться методом paint() для отображения графических файлов? Не лучше ли использовать всегда метки с фоном? Это вроде как проще и глюков меньше... Что опыт подзказывает?

Это сообщение отредактировал(а) marc13 - 22.8.2005, 14:12
PM MAIL   Вверх
Domestic Cat
Дата 22.8.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Цитата(marc13 @ 22.8.2005, 03:27)
Мой вопрос скорее можно переформулировать так: как сделать так, чтобы метод paint() не стирал предыдущую, уже имеющуюся графику, а рисовал поверх нее.

Можно конечно. Если ты хочешь нарисовать например 5 картинок одна поверх другой, в paint, точнее в paintComponent нужно рисовать все эти 5 картинок в объект графики в нужном порядке. В твоем случае проще всего держать лист имаджей и прорисовывать их в цикле.
Цитата(marc13 @ 22.8.2005, 04:48)
С точки зрения работы программы - ее ресурсоемкости и т.п. - стоит ли вообще пользоваться методом paint() для отображения графических файлов? Не лучше ли использовать всегда метки с фоном? Это вроде как проще и глюков меньше... Что опыт подзказывает?

Никакой принципиальной разницы нет, если паинт написан не криво.


--------------------

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.