![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
anti_snayper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
Есть календарь, написанный на свинге. Выполнен в виде JMenuPopup с набором кнопок, ддл, текстовым полем. Он встраивается в интерфейс с другими контролами. Нужно чтобы при клике на внешнем контроле календарь скрывался, при клике на внутреннем позволял произвести выбор значения(например, ддл выбора месяца). Я могу перехватывать в нем события changeState или связанные с изменением фокуса. Но не знаю как узнать от кого оно пришло. К примеру, в случае с ддл, ивент говорит, что создатель события - MenuSelectionManager, из которого ничего полезного выудить не получается.
Как решают такие ситуации? Наверняка же должен какой-то типовой подход... Спасибо. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Ну а если разными слушателями (Listener) разные клики отслеживать? А в слушателе прописать атрибут, который знает "хозяина"?
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
anti_snayper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
Утром торопился потому написал видимо не очень понятно. Попробую еще раз... На интерфейсе есть JComboBox-ы. При клике на каком либо из них автоматом генерится стандартное событие, которое оповещает остальные элементы интерфейса о том что им надо закрыться. Это обычное поведение любого интерфейса. Я добавил выпадающий по клику на кнопке календарь, который выполнен в виде JMenuPopup. В нем есть JComboBox с месяцами. Так вот при клике на этом ддл - календарь закрывается. Т.е. этот контрол генерит событие которое закрывает свой собственный контейнер(JMenuPopup). Такого само собой быть не должно.
Я недавно занялся свингом и вполне возможно что-то недопонимаю. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Вместо стандартного Listener пишешь свой, наследующий от стандартного. Я сейчас не могу посмотреть видно ли из кода Listener-а на каком контроле кликнули.
Хочешь напишу код. Но быстро не обещаю. В форуме сижу пока компы делом заняты. Может вечерком или завтра. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
anti_snayper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
За пример был бы очень благодарен... Можете сказать какой event оповещает остальные элементы интерфейса о своем закрытии?
Это сообщение отредактировал(а) anti_snayper - 9.2.2011, 15:46 |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Поскольку я не знаю что за классы вы используете в качестве календарей, набросал пример иллюстрирующий общий принцип. Работает по первому варианту. Оказалось я помнил правильно и событие знает на каком объекте кликнули.
Програмка показывает множество кнопок. При клике на одну кнопку она увеличивается, а размеры остальных становятся стандартными. Что непонятно - спрашивайте.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
anti_snayper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
Вот простой пример . Есть 2 JComboBoxa. Кликаем по первому - он открывается. Кликаем по второму - первый закрывается, второй открывается. Вот меня и интересует. Какой listener мне нужно переопределить и как, чтобы они друг друга не закрывали?
Это сообщение отредактировал(а) anti_snayper - 10.2.2011, 01:07 |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Эге. Теперь проблема понятнее. Надо подумать. Закрытие JComboBox, видимо, связано с потерей им фокуса, но я не уверен - надо проверять.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
anti_snayper |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
Решил оставить поведение JComboBox-ов как есть, адаптировав под него интерфейс.
P.S. Вообще была идея использовать вместо JMenuPopup - JDialog. При этом проблема решается сама собой, но нужно поколдовать над диалоговым окном для его кастомизации под попап. Думаю, что этот вариант вполне реализуем, но надо проверять. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
Если не заморачиваться именно с JComboBox-ами, то можно написать самому их иммитацию. На JPanel поместить текстовое поле и обычный список JList ниже него. Этот список прятать-показывать когда захочется. Но в этом случае, естественно, придется много кодить рутинных вещей.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |