![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Mirkes |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Возникла не понятная мне проблема. Создал панель с BorderLayout. На север вставил JToolBar, на восток потомка JPanel по имени leg.
Далее вставил эту панель во Frame и запустил. По нажатию трех кнопок в JToolBar gtb посылаются события с идентификаторами 8, 9 и 10. Ниже приведен код обработчика событий:
Проблема состоит в том, что при нажатии кнопок 8 и 10 ничего не происходит, пока не начнешь изменять размер окна. Если нажать кнопку 9 (убрать легенду) то она исчезает. Если потом нажать кнпку 8 - поместить с левой стороны, то легенда возникает с правой, где и была. Но только до изменения размера окна. При изменении размеров окна - все приходит в норму. Если идти через отладчик, то тоже все в порядке. Если я праильно понимаю, то BorderLayout - компоновщик с состоянием. И до тех пор, пока что-то в серьез не изменится (например размер панели) пересчет состояния не производится. Внимание вопрос: как заставить BorderLayout пересчитать состояния и отобразить легенду в нужном мне в данный момент месте? Это сообщение отредактировал(а) Mirkes - 5.2.2012, 16:02 -------------------- Mirkes |
||||
|
|||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 21 Всего: 75 |
Попробуйте принудительно вызвать у контейнера repaint()
-------------------- Opinions are like assholes — everybody has one |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
repaint у панели, в которую я помещал легенду вызывается (см код в предыдущем сообщении). У какого контейнера вызвать repaint?
-------------------- Mirkes |
|||
|
||||
Dummy |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 2 Всего: 19 |
Простого repaint() недостаточно в случае добавления или удаления элементов. Нужно спарить вызовы revalidate() + repaint() в панели.
Вызов revalidate() нужен, чтобы сообщить компоновщику вашей панели и компоновщикам родительских контейнеров (вплоть до т. н. Validate Root), что геометрию необходимо пересчитать. Далее revalidate() вызывает validate() на компоненте Validate Root, так что геометрия пересчитывается вплоть до вашей панели. Вызов repaint() нужен для случаев, когда после revalidate() не происходит реального изменения геометрии элементов (например, был удален последний элемент из GridLayout). Это сообщение отредактировал(а) Dummy - 5.2.2012, 17:40 |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Спасибо огромное. Выручили. Все заработало.
-------------------- Mirkes |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |