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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> paintIcon(Component c, Graphics g, int x, int y, Понимание аргументов метода 
V
    Опции темы
tolet
Дата 4.10.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



Доброго дня.

есть вопрос касательно метода paintIcon()

есть четыре аргумента:

Component c - указывает в каком компоненте нужно прорисовывать иконку

int x, int y - координаты левого верхнего угла иконки

Graphics g - ??? - никак не могу допереть что ето такое!

Подскажите, плиз - правильно ли я понимаю три компонента и разъясните что это за четвертый аргумент (Graphics g) и как его правильно использовать?

Заранее благодарен за ответы
PM MAIL WWW ICQ   Вверх
powerOn
Дата 4.10.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(tolet @  4.10.2006,  15:38 Найти цитируемый пост)
есть вопрос касательно метода paintIcon()

Это какого класса метод? Если ImageIcon, то почитай тут.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
tolet
Дата 4.10.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



powerOn, 

спасибо за ссылку - там я уже читал - и если бы понял что к чему - то пост бы не выставлял свой. так что вопрос для меня все еще остается открытым, и если кто-нибудь сможет помочь разобраться в нем, то буду весьма благодарен.
PM MAIL WWW ICQ   Вверх
powerOn
Дата 4.10.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата

    c - the component to be used as the observer if this icon has no image observer
    g - the graphics context
    x - the X coordinate of the icon's top-left corner
    y - the Y coordinate of the icon's top-left corner




Component c - это компонент, который выступает в качастве ImageObserver, если данный ImageIcon не имеет ImageObserver. ImageObserver, он как слушатеть будет уведомлен об изменениях в процессе рисования. На нем не рисуют!.

Graphics g -  тут будет происходить рисования. Считай что это холст.

x и y - это коодинаты верхнего левого угла изображения, которое должно получится в результате рисования. Задается заранее, т.е. кто вызывает этот метод, просит, что бы коодинаты верхнего левого угла были x и y.

Тот кто реализует Интерфейс Icon, должен реализовать этот метод, что собственно и делает ImageIcon.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
tolet
Дата 4.10.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



powerOn, 
Цитата(powerOn @  4.10.2006,  18:46 Найти цитируемый пост)
Graphics g -  тут будет происходить рисования. Считай что это холст.

зничит ли это то, что если я размещаю иконку на JPanel то имнно эту панель я должен указать в качестве аргумента Graphics g?


Цитата(powerOn @  4.10.2006,  18:46 Найти цитируемый пост)
Component c - это компонент, который выступает в качастве ImageObserver, если данный ImageIcon не имеет ImageObserver. ImageObserver, он как слушатеть будет уведомлен об изменениях в процессе рисования. На нем не рисуют!.


может ли этот аргумент равнятся значению null

еще раз спасибо за ответ
PM MAIL WWW ICQ   Вверх
LSD
Дата 4.10.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(tolet @  4.10.2006,  20:26 Найти цитируемый пост)
зничит ли это то, что если я размещаю иконку на JPanel то имнно эту панель я должен указать в качестве аргумента Graphics g?

Метод paintIcon() вызывается не тобой, а тем компонентом которому надо нарисовать иконку. Если ты пишешь свой компонент, и хочешь на нем нарисовать иконку, то тогда ты должен передать этот компонент, графический контекст и координаты, где рисовать.

Цитата(tolet @  4.10.2006,  20:26 Найти цитируемый пост)
может ли этот аргумент равнятся значению null

Может, но тогда могут быть негативные последствия. Например иконка с анимированным гифом будет отрисовываться неправильно.


--------------------
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.
PM MAIL WWW   Вверх
powerOn
Дата 4.10.2006, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(tolet @  4.10.2006,  20:26 Найти цитируемый пост)
зничит ли это то, что если я размещаю иконку на JPanel то имнно эту панель я должен указать в качестве аргумента Graphics g?


Graphics этой панели.

Цитата(tolet @  4.10.2006,  20:26 Найти цитируемый пост)
может ли этот аргумент равнятся значению null

несомненно.

примерчик:

Код

import java.awt.BorderLayout;
import java.awt.Graphics;
 import javax.swing.ImageIcon;

public class NewJFrame extends javax.swing.JFrame {
    public NewJFrame() {
        initComponents();
    }
    
    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().add(new NewJPanel(), BorderLayout.CENTER);
        pack();
    }                        
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
}

class NewJPanel extends javax.swing.JPanel {
    ImageIcon icon = new ImageIcon("av.gif");
    
    /** Creates new form NewJPanel */
    public NewJPanel() {
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (icon != null) {
            icon.paintIcon(null, g, 5, 5);
        }
    }
}




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
tolet
Дата 4.10.2006, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



прошу прощения за возможную тупость, но у меня есть в связи с примером еще вопрос:

для того, чтобы рисовать хоть что-то, я должен к панели сначала прикрепть метод paintComponent, и уже там реализовать метод paintIcon?
PM MAIL WWW ICQ   Вверх
powerOn
Дата 4.10.2006, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(tolet @  4.10.2006,  22:10 Найти цитируемый пост)
для того, чтобы рисовать хоть что-то, я должен к панели сначала прикрепть метод paintComponent, 

Для того чтобы рисовать на наследнике JPanel достаточно переопределить его метод paintComponent(Graphics g) (или paint(Graphics g)) и в нем производить рисовние (Graphics дадут, а это главное).

Цитата(tolet @  4.10.2006,  22:10 Найти цитируемый пост)
и уже там реализовать метод paintIcon? 

метод paintIcon объявлен в  интерфейсе javax.swing.Icon, его реализуют классы которые "утверждают" что они Icon. Типичный пример: ImageIcon. Если Вы хотите чтобы ваша панель, наследница JPanel, выступала и в роли Icon, то пусть она реализует этот интерфейс. 



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
tolet
Дата 4.10.2006, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



я отниму у вас еще немного времени, если позволите, и спрошу вот что:

есть класс - наследник JPanel. в нем есть два метода: первый  - это создание панели с графический содержанием, а второй - переопределение метода суперкласса PaintComponent(Graphics g)

вот часть кода с двумя этими методами:
Код


public JPanel previewBlock () {

          JPanel panel = new JPanel();
          paintComponent(panel);
               

}

public void paintCompanent(Graphics g) {

          super.paintComponent(g);
          g.paintIcon(null, g, 0, 0);

}



правилен ли будет этот код, для того чтобы прорисовать иконку на панели?

и еще все таки хочется прояснить вопрос с Observer: как его правильно указать? - нулл конечно можно использовать - как вы показали, но тем не менее - хочется корректно передать методу paintIcon аргумент

еще раз благодарен за ответы
PM MAIL WWW ICQ   Вверх
LSD
Дата 4.10.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(tolet @  4.10.2006,  23:51 Найти цитируемый пост)
правилен ли будет этот код, для того чтобы прорисовать иконку на панели?

Ну как минимум в первом методе будет ошибка, потому что JPanel != Graphics.


Цитата(tolet @  4.10.2006,  23:51 Найти цитируемый пост)
и еще все таки хочется прояснить вопрос с Observer: как его правильно указать? - нулл конечно можно использовать - как вы показали, но тем не менее - хочется корректно передать методу paintIcon аргумент

Если ты наследуешь от 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.
PM MAIL WWW   Вверх
tolet
Дата 4.10.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



а если вот так код сделать? :

Код


public JPanel previewBlock () {

          JPanel panel = new JPanel();
          paintComponent(icon);
               

}

public void paintCompanent(Graphics g) {

          super.paintComponent(g);
          g.paintIcon(this, panel, 0, 0);

}


PM MAIL WWW ICQ   Вверх
LSD
Дата 4.10.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Опять нет smile  Тебе надо почитать про систему рисования в Swing. Рекомендую Портянкина - на русском и достаточно толково (поищи в Компьютерной литературе).

Метод paintComponent() напрямую вызывать нет необходимости, его вызовет repaint manager когда придет время. Если нужно обновить компонент, просто вызови у него repaint().
А второй метод надо реализовать так:
Код
private Icon icon;
  
public void paintComponent(Graphics g)
{
  icon.paintIcon(this, g, 0, 0);
}



--------------------
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.
PM MAIL WWW   Вверх
tolet
Дата 4.10.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



LSD, 

понял - спасибо большое. поищу обязательно книженцию.
PM MAIL WWW ICQ   Вверх
tolet
Дата 5.10.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 24.9.2006
Где: Москва

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



Добрый день

Я что-то никак не могу понять один и тот же вопрос, поэтому возобнавляю эту тему. Прошу заранее прощения у тех, для кого данный вопрос уже не проблема. Просто очень хочу разобраться в данном вопросе.

Итак, преамбула.

Есть метод, который создает панель с карточным менеджером компановки. Вот его код:

Код


    private JPanel previewBlock (int i) {

        JPanel cards = new JPanel();
        cards.setLayout(new CardLayout());
        JPanel mainPanel = new JPanel();
        JPanel hoverPanel = new JPanel();
        JPanel clickPanel = new JPanel();
        cards.add(mainPanel, "MAIN");
        cards.add(hoverPanel, "HOVER");
        cards.add(clickPanel, "CLICK");
        cards.addMouseListener(this);
        return cards;
    }



И еще в классе существют три массива ImageIcon main[], hover[], click[], в которых хранятся иконки. В данный метод передается значение номера элемента массивов по которым будут выбираться нужные иконки и загружаться на КАЖДУЮ карту.

Теперь непосредственно амбула:

Как мне в каждую из карт колоды загрузить соответствующее изображение (иконку)? Т.е. mainPanel должна содержать иконку из массива main[i], hoverPanel из массива hover[i], а clickPanel соответственно из массива click[i].

Вот такая вот, для меня непростая задача.

Буду признателен, если кто-нибудь возьмется разъяснить мне этот вопрос подробно.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1368 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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