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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JApplet, что использовать paint или paintComponent 
:(
    Опции темы
monax
Дата 21.6.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Заинтересовал вопрос, как правильно рисовать в swing. В одной книге нашёл описание как это делать, написал два класса. Потом попробовал заменить paintComponent на paint. Работает по-прежнему. Хотя есть разница. Если в классе Screen убрать вызов super(); из конструктора, то при использовании  paintComponent во время завершения апплета вылетают исключения, при использовании paint() этого не происходит.
Всё-таки хотелось бы знать, как правильнее.
Код
 
import java.awt.Color;
import javax.swing.JApplet;

public class Application extends JApplet {

    private Screen screen;

    public void init() {
        screen = new Screen();
        screen.setBackground(Color.BLACK);
        setContentPane(screen);
    }
}


Код

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Screen extends JPanel {

    public Screen() {
        super();
    }
    
    public void paintComponent(Graphics cont) {
        super.paintComponent(cont);
        int width = getSize().width;
        int height = getSize().height;

        cont.setColor(Color.WHITE);
        cont.drawString("String", width / 2, height / 2);
    }
}


--------------------
Лаборатория программиста
PM MAIL WWW ICQ Jabber   Вверх
LSD
Дата 21.6.2007, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Лучше использовать paintComponent(). И по идее исключений там быть не должно. Что за исключение у тебя вылетает?


--------------------
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   Вверх
monax
Дата 22.6.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pData
    at sun.awt.windows.Win32SurfaceData.initOps(Native Method)
    at sun.awt.windows.Win32SurfaceData.<init>(Win32SurfaceData.java:448)
    at sun.awt.windows.Win32SurfaceData.createData(Win32SurfaceData.java:316)
    at sun.awt.Win32GraphicsConfig.createSurfaceData(Win32GraphicsConfig.java:357)
    at sun.awt.windows.WComponentPeer.replaceSurfaceData(WComponentPeer.java:332)
    at sun.awt.windows.WComponentPeer.replaceSurfaceData(WComponentPeer.java:313)
    at sun.awt.windows.WComponentPeer$2.run(WComponentPeer.java:353)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


Но это если вместо
Код

    public Screen() {
        super();
        addMouseListener(this);
    }

написать это
Код

    public Screen() {        
        addMouseListener(this);
    }


Исключение появляется при завершении работы апплета, то есть отловил я это в консоли.
--------------------
Лаборатория программиста
PM MAIL WWW ICQ Jabber   Вверх
newObject
Дата 7.8.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Во че нашел (случайно, до этого как то не заострял внимание, ЗЛО копи-паста  smile ).

Цитата

В документации по paint() указано, что при вызове метода он, в свою очередь, вызывает три других метода JComponent: сначала paintComponent(), затем paintBorder() и, наконец, paintChildren(). Из порядка вызова методов вы можете увидеть, что Swing рисует себя снизу вверх. Важным уроком является то, что для переопределения внешнего вида компонента вы должны переопределить метод paintComponent(), который непосредственно несет ответственность за рисование конкретного компонента на экране. 


Полный текст здесь

А эксепшен валится скорее всего из-за того что тяжелый представитель awt не находит легкой пары JPanel, которая инициализируется вызовом конструктора без параметров JPanel ( super(); ).
PM MAIL   Вверх
LSD
Дата 7.8.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(newObject @  7.8.2007,  11:35 Найти цитируемый пост)
А эксепшен валится скорее всего из-за того что тяжелый представитель awt не находит легкой пары JPanel, которая инициализируется вызовом конструктора без параметров JPanel ( super(); ).

1. конструктор суперкласса вызывается всегда, независимо от того написал его вызов программист или нет
2. Screen не тяжеловестный копмонент.


--------------------
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   Вверх
newObject
Дата 7.8.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

2. Screen не тяжеловестный копмонент.


1. Я не говорил что Screen тяжеловесный компонент.
2. По поводу конструктора, это да, нагнал. Подзабыл маленько ООП.

И всетаки по поводу эксепшена, я не нашел четкого ответа что это может быть, но практически все говорят о баге  в версии 1.3.0 
PM MAIL   Вверх
Just_Girl
Дата 10.8.2007, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



You sometimes see code that overrides paint() instead of paintComponent(). 
This was necessary in the older AWT, however in Swing paint() calls three methods: paintComponent(), paintBorder(), and paintChildren. 
The general rule is to override paintComponent() if you're using Swing (JComponent, JPanel, JApplet) and paint() if you're using one of the AWT classes (Applet, Canvas). 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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