![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
Доброго дня.
есть вопрос касательно метода paintIcon() есть четыре аргумента: Component c - указывает в каком компоненте нужно прорисовывать иконку int x, int y - координаты левого верхнего угла иконки Graphics g - ??? - никак не могу допереть что ето такое! Подскажите, плиз - правильно ли я понимаю три компонента и разъясните что это за четвертый аргумент (Graphics g) и как его правильно использовать? Заранее благодарен за ответы |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
||||
|
||||
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
powerOn,
спасибо за ссылку - там я уже читал - и если бы понял что к чему - то пост бы не выставлял свой. так что вопрос для меня все еще остается открытым, и если кто-нибудь сможет помочь разобраться в нем, то буду весьма благодарен. |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Component c - это компонент, который выступает в качастве ImageObserver, если данный ImageIcon не имеет ImageObserver. ImageObserver, он как слушатеть будет уведомлен об изменениях в процессе рисования. На нем не рисуют!. Graphics g - тут будет происходить рисования. Считай что это холст. x и y - это коодинаты верхнего левого угла изображения, которое должно получится в результате рисования. Задается заранее, т.е. кто вызывает этот метод, просит, что бы коодинаты верхнего левого угла были x и y. Тот кто реализует Интерфейс Icon, должен реализовать этот метод, что собственно и делает ImageIcon. |
|||
|
||||
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
powerOn,
зничит ли это то, что если я размещаю иконку на JPanel то имнно эту панель я должен указать в качестве аргумента Graphics g? может ли этот аргумент равнятся значению null еще раз спасибо за ответ |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Метод paintIcon() вызывается не тобой, а тем компонентом которому надо нарисовать иконку. Если ты пишешь свой компонент, и хочешь на нем нарисовать иконку, то тогда ты должен передать этот компонент, графический контекст и координаты, где рисовать. Может, но тогда могут быть негативные последствия. Например иконка с анимированным гифом будет отрисовываться неправильно. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Graphics этой панели. несомненно. примерчик:
|
||||
|
|||||
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
прошу прощения за возможную тупость, но у меня есть в связи с примером еще вопрос:
для того, чтобы рисовать хоть что-то, я должен к панели сначала прикрепть метод paintComponent, и уже там реализовать метод paintIcon? |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Для того чтобы рисовать на наследнике JPanel достаточно переопределить его метод paintComponent(Graphics g) (или paint(Graphics g)) и в нем производить рисовние (Graphics дадут, а это главное). метод paintIcon объявлен в интерфейсе javax.swing.Icon, его реализуют классы которые "утверждают" что они Icon. Типичный пример: ImageIcon. Если Вы хотите чтобы ваша панель, наследница JPanel, выступала и в роли Icon, то пусть она реализует этот интерфейс. |
|||
|
||||
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
я отниму у вас еще немного времени, если позволите, и спрошу вот что:
есть класс - наследник JPanel. в нем есть два метода: первый - это создание панели с графический содержанием, а второй - переопределение метода суперкласса PaintComponent(Graphics g) вот часть кода с двумя этими методами:
правилен ли будет этот код, для того чтобы прорисовать иконку на панели? и еще все таки хочется прояснить вопрос с Observer: как его правильно указать? - нулл конечно можно использовать - как вы показали, но тем не менее - хочется корректно передать методу paintIcon аргумент еще раз благодарен за ответы |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Ну как минимум в первом методе будет ошибка, потому что JPanel != Graphics. Если ты наследуешь от Component, то просто передавай this. В Component уже реализован интерфейс ImageObserver. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
а если вот так код сделать? :
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Опять нет
Метод paintComponent() напрямую вызывать нет необходимости, его вызовет repaint manager когда придет время. Если нужно обновить компонент, просто вызови у него repaint(). А второй метод надо реализовать так:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
LSD,
понял - спасибо большое. поищу обязательно книженцию. |
|||
|
||||
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
Добрый день
Я что-то никак не могу понять один и тот же вопрос, поэтому возобнавляю эту тему. Прошу заранее прощения у тех, для кого данный вопрос уже не проблема. Просто очень хочу разобраться в данном вопросе. Итак, преамбула. Есть метод, который создает панель с карточным менеджером компановки. Вот его код:
И еще в классе существют три массива ImageIcon main[], hover[], click[], в которых хранятся иконки. В данный метод передается значение номера элемента массивов по которым будут выбираться нужные иконки и загружаться на КАЖДУЮ карту. Теперь непосредственно амбула: Как мне в каждую из карт колоды загрузить соответствующее изображение (иконку)? Т.е. mainPanel должна содержать иконку из массива main[i], hoverPanel из массива hover[i], а clickPanel соответственно из массива click[i]. Вот такая вот, для меня непростая задача. Буду признателен, если кто-нибудь возьмется разъяснить мне этот вопрос подробно. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Класс JPanel не позволяет установить для себя иконку, или надо от него унаследовать и добавить такую возможность или использовать JLabel.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| tolet |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 24.9.2006 Где: Москва Репутация: нет Всего: нет |
но при этом все-таки нужно использовать метод paintIcon?
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
При чем при этом? Если ты работаешь с JLabel, то не нужно самому вызывать метод paintIcon(), это сделает сам JLabel. Если ты реализуешь свой компонент, то тогда ты должен определить в нем метод рисования и уже в нем вызывать paintIcon(). Как это сделать powerOn тебе уже показал. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "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. |