?

Log in

No account? Create an account

Previous Entry | Next Entry

Очередная статья родилась. Времени на нее я потратил чуть не четыре месяца – было много работы, да и статья обширная, иллюстративных примеров много потребовалось. Статья посвящена внутреннему устройству GUI в Java, а точнее в Swing, ибо AWT, во-первых, устарел, во-вторых, устроен немного по-другому.

В общем, сама статья выложена: http://www.skipy.ru/technics/gui_int.html. Здесь будем ее обсуждать.

Comments

miklegarin
Jan. 17th, 2011 10:08 am (UTC)
Re: Возможные уточнения/дополнения к статье
Да, тут вспомнилась еще 1 вещь...

4) "paintComponent – этот метод позволяет отрисовать саму компоненту. Т.е. делает то, что в AWT делал paint(Graphics). Именно этот метод необходимо переопределять для того, чтобы отрисовать что-то на компоненте. Можно, конечно, переопределить и paint(Graphics) – а те, кто начинал с AWT, часто этим грешат! – но тогда при использовании рамок (border) начнутся сложности."

Тут также важно понимать то, что метод paintComponent зачастую вызывается при частичных перерисовках компонента с разными указанными clip'ами. Также он может быть и вовсе не вызван, если перерисовываемая часть полностью закрыта opaque компонентами.
Метод же paint будет вызываться всегда при "возможной" необходимости перерисовки (будь то перекрытие другим компонентом, ресайз или что еще). Таким образом не всегда paintComponent лучше в использовании.
Тем более в сложном графическом компоненте использование его, а не paint может породить различные проблемы с перерисовкой частей.
Но для простых компонентов, когда нет смысла/времени заморачиваться с оптимизацией - да, paintCompomponent однозначно более удачный выбор.


5) Еще одно замечание к тому же paintComponent...

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

Думаю, тут стоит еще раз напомнить, что замена paintComponent (вместо paint) решает проблему с отрисовкой бордера, а не с отступами, создаваемыми бордером.
skipy_ru
Feb. 14th, 2011 01:40 pm (UTC)
Re: Возможные уточнения/дополнения к статье
Добрый день!

Спасибо за комментарии, обстоятельно. В принципе, со всем согласен. Если соберусь пересматривать/дополнять, возможно, что-то добавлю в статью. А пока – Вы очень хорошо всё это изложили и без меня, а ссылка на это обсуждение в статье есть.

Касательно исследований производительности и т.п. - явно не сейчас. Мне на ответ найти времени - месяц понадобился.
miklegarin
Feb. 14th, 2011 02:18 pm (UTC)
Re: Возможные уточнения/дополнения к статье
Ну, с кое-чем из моих замечаний (думаю) можно было бы и поспорить, как мне уже сейчас кажется...

Касательно исследований производительности и т.п. - явно не сейчас. Мне на ответ найти времени - месяц понадобился.
Это само собой, просто тема мало где затронута (если вообще не проигнорирована) и хотелось бы побольше накопать в этом направлении.
Также, если интересно или нужно - могу позднее собрать некоторую долю материала по этой теме из того, что удалось самому найти/узнать на собственных ошибках при написании крупного приложения для прототипирования (фактически - сплошная работа с графикой).

В любом случае еще раз спасибо за содержательную статью!
Буду ждать продолжения :)