![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
godun |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
имеется класс наследованный от Jcomponent который для простоты примера является прямоугольником
он добавлен на обнакновенную Jпанель котороая Находиться в JFrame
вообщем при вызове перерисовки моего фрэйма в главной программе вызывается перерисвока панели а затем моего компонента, т.е. paintComponent(Grpahics g) вызывается нормально но переисовка самого компонента не происходить, проблема лежит в том что метода переисовки компонента не получает "правильной" ссылки на Graphics g. Если же вызывать напрямую myComponent.paint(g) в теле метода MyPanel::paintComponent(Grpahics g) то компонент рисуется нормально. Правильно ли так делать и почему paintComponent() омоего компонента не получает нужной ссылки на графику. |
||||
|
|||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Ты забыл добавить свой компонент на панель, поэтому он и не отображается. Попробуй так:
Это сообщение отредактировал(а) powerOn - 14.11.2006, 12:14 |
|||
|
||||
godun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
непонимаю зачем 2 раза добавлять мой компонет.... 1 раз в конструктуре MyPanel() a 2 ой раз в конструктуре MyFrame()..
при создании MyPanel мой компонент автоматом туда добавляется. проблема в том что метода отрисовки MyComponent не получает правильную графику... а с прямым вызовом myComponent.paint(g); (у меня в камментах) все работает! ![]() |
|||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Замени:
на
Добавлено @ 16:41 Да и вообще нафиг надо было переопределять метод, если ничего полезного ты там не делаешь... -------------------- 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. |
||||
|
|||||
godun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
@LSD
эти классы я взял для примера как можно более проще, чтоб яснее проблема была.. на super.paintComponent(g); уже заменял резултат прежний.. говрю ж работает только с myComponent.paint(g); или я что то недопонимаю или неправильно вообще все составил. Добавлено @ 16:54 еще раз функция myComponent::paintComponent(g) вызывается нормально, не происходит лишь отрисвока прямоугольника g.fillRect(10, 100,50,10); как бы метода получает неверную ссылку на графику... почему? ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Проблема в том, что по умолчанию у JPanel стоит FlowLayout, а он ставит компоненту те размеры которые он "предпочитает". По умолчанию JComponent "предпочитает" - нулевой размер.
Сделай так:
Добавлено @ 17:03 Да нормальная у него ссылка. Система рисования Swing давно проверена и отлажена, ошибки если в ней и есть, то не такие топорные. -------------------- 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. |
|||
|
||||
godun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
помогло... спасибо
действительно 0-размер =) ... но только почему с myComponent.paint(g); работетало и так... Это сообщение отредактировал(а) godun - 14.11.2006, 17:21 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Потому что, ты при рисовании плевал на размер компонента. Когда ты получаешь Graphics в методе paint() то у него уже сделан clipping не позволяющий тебе рисовать за пределами компонента (именно на такой случай). У тебя компонент нулевого размера, и область рисования тоже. -------------------- 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. |
|||
|
||||
godun |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
здорово...
чтобы изменить размер компонента с 1х1 пиксел можно пользоваться setSize(int, int) для компонента или использовать отличный от FlowLayout лайаут на панели например GridBagLayout? спасибо еще раз за ответы. |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 31 Всего: 159 |
Менеджеров расположении много, и из них каждый имеет свои особенности. Почитай про них тут. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 38 Всего: 538 |
Или у нас в FAQ: Что такое LayoutManager.
-------------------- 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. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |