![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| marc13 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.6.2005 Репутация: нет Всего: нет |
Подскажите, пожалуйста, как решить такую проблему (сорри за банальность проблемы, но я начинающий, и своими средствами не смог решить):
Мне нужно отображать в окне JFrame GIF файлы, один за другим (следующий по нажатию кнопки, например). Я хотел использовать метод paintComponent() и drawImage() в нем, но при загрузке следующей картинки, предыдущая сбрасывается. Судя по тому, что я нашел в Инете, тут надо сохранять содержимое всей графики в буфер перед открытием каждого нового файла. Только нигде не было толковых примеров с пояснениями. В конечном итоге, я построил все на основе JLabel с картинками в качестве бэкграунда, но хотелось бы разобраться, как заставить работать paintComponent(). Спасибо |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
А в чем, собственно, задача? Тебе нужно рисовать следующую картинку поверх предыдущей? Или нужно рисовать их рядом друг с другом?
Добавлено @ 10:58 Пардон, проморгал. Там же написано - "один за другим". Можно, например, переопределить метод paint таким образом, чтобы он брал картинки из массива и рисовал их - на первом шаге одну, на втором - первую и вторую, потом - первую, вторую и третью и т.д. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| marc13 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.6.2005 Репутация: нет Всего: нет |
Согласен, так сработает, но, по сути, это мало чем отличается от использования JLabel с бэкграундом. Paint каждый раз все рисует заново.
Мой вопрос скорее можно переформулировать так: как сделать так, чтобы метод paint() не стирал предыдущую, уже имеющуюся графику, а рисовал поверх нее. У меняв итоге получилось, но при сворачивании и разворачивании окна все предыдущее исчезает, остается только результат последнего рисования. |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 7 Всего: 151 |
Мне кажется, метод "без стирания" неправилен. А если ты поместишь поверх какое-нибудь окно? На изображении останутся артефакты. Обычно такие вещи делают полной перерисовкой.
Это сообщение отредактировал(а) Lamer George - 22.8.2005, 12:54 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| marc13 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.6.2005 Репутация: нет Всего: нет |
Да, пожалуй, ты прав.
Спасибо! И еще появился вопрос, связанный с тем же. С точки зрения работы программы - ее ресурсоемкости и т.п. - стоит ли вообще пользоваться методом paint() для отображения графических файлов? Не лучше ли использовать всегда метки с фоном? Это вроде как проще и глюков меньше... Что опыт подзказывает? Это сообщение отредактировал(а) marc13 - 22.8.2005, 14:12 |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 13 Всего: 172 |
Можно конечно. Если ты хочешь нарисовать например 5 картинок одна поверх другой, в paint, точнее в paintComponent нужно рисовать все эти 5 картинок в объект графики в нужном порядке. В твоем случае проще всего держать лист имаджей и прорисовывать их в цикле.
Никакой принципиальной разницы нет, если паинт написан не криво. -------------------- |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |