![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
Собственно сабж. Захотелось реализовать свой компонент... Начал с исходников классов jdk(JLabel, JTextField ну и так далее). Но что-то тяжковато разбиратся - что, куда и зачем. Можете покинуть линков, чтобы легче было(мне)
|
|||
|
||||
| fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 15 Всего: 27 |
Какого рода компонент? На основе существующих или с кастомной отрисовкой?
В первом случае лучше наследоваться от JPanel, во втором или от JPanel или от JComponent и перекрывать paintComponent(Graphics) -------------------- ![]() |
|||
|
||||
| RebornCrusader |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 18.1.2007 Где: Владивосток Репутация: 3 Всего: 6 |
Всю жизнь переопределял paint(Graphics). И вот почему: Цитата из JavaDoc для paint():
Т. е. если мы полностью хотим самостоятельно рисовать компонент, и должны перекрыть сам paint(). А в твоём случае система рисует ещё и рамку с дитями, что, как правило, для самодельных компонентов излишне. Также следует иметь в виду, что передаваемый графический контекс в paintComponent() нельзя изменять:
--------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier" |
||||
|
|||||
| fixxer |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 15 Всего: 27 |
Ну на вкус и цвет все фломастеры разные.
А вот это легко обходится.
Ну или даже, как и написано g.create(...) Это сообщение отредактировал(а) fixxer - 26.4.2007, 07:09 -------------------- ![]() |
||||||
|
|||||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Переопределения методов paint() и paintComponent() имеют свои особенности, что парой имеет большое значение.
Например метод paint() вызывается после того, как были прорисованы дочерние компоненты, а метод paintComponent - до. Если вы хотите порисовать некий собственный фон для вашего компонента-контейнера, то нужно делать это в методе paintComponent(), тогда все дочерние компоненты окажутся "на фоне". А если, к примеру, вы реализуете функциональность группового выделения мышью, при котором должен рисоваться прозрачный прямоугольник (тот что показывает область выделения) поверх компонентов, то следует его рисовать в методе paint(). |
|||
|
||||
| RebornCrusader |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 18.1.2007 Где: Владивосток Репутация: 3 Всего: 6 |
"Дико извиняюсь", но...
Что-то странное. Это откуда информация? Поверхностный просмотр javadocов, исходников и книжки Портянкина (в частности, стр. 113) такого не выявляет. Да, рисуется сам компонент, затем дети - это и так очевидно. Но выглядит это так:
Перекрывая paint(), мы убиваем весь этот механизм и рисуем полностью сами. P.S. super.paint(), конечно, имеет смысл вызывать именно первым (если вообще вызывать). --------------------
"Fais se que dois, - adviegne que peut. C'est commande au chevalier" |
||||
|
|||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Главное в каком порядке отрабатывает наш код, а не код супер класса.
Я имел ввиду перекрытие с вызовом метода super.paint() и super.paintComponent(), как вы и сказали, на первом месте. Вообще методы суперкласса полезно вызывать, хотя и никто не заставляет. Но не делая этого, логика работы конечно же будет нарушена. При таком подходе, бизнес нагрузка переопределенных методов будет срабатывать в несколько ином порядке. Т.е. я имет ввиду порядок, при котором метод полностью отработает. Кстати, ваша схема прекрасно это отображает.
|
|||
|
||||
![]()
|
| Правила форума "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. |