![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Prospekt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 30.5.2012 Репутация: нет Всего: 1 |
Имеется некая переопределенная JPanel на которой находятся самописные элементы (наследники JComponent).
Необходимо сделать так, чтобы при одних условиях события мыши эти компоненты не обрабатывали, а при других обрабатывали. Меня бы устроило, если бы флаг срабатывания содержался бы на моем JPanel и перед обработкой слушателя подкомпонента (того, который находится на этой панеле) предварительно проходил некий код на этой панеле, и только потом вызывался бы обработчик подэлемента (когда надо). Думал, что события опускается по дереву, т.е. что каждая панель проверяет попадает ли мышь на какой-нибудь из её подэлементов, и если да, то делигирует вызов этому подэлементу. Все это работает до тех пор, пока не найдется самый нижний узел, который вызовет уже свой собственный слушатель. А вот и фиг. 2 часа экспериментов с JPanel не дали результатов. Походу поиск целевого элемента происходит где-то в другом месте, и сама панель, содержащая целевой элемент никакого оповещения о событии мыши не получает. Чего хочу от вас: 1. Кто подскажет сам процесс движения события и поиска для него целевого элемента. 2. Какими способами можно сделать то, что я описал? 3. Является ли ниже описанное решение единственно разумным? Каждый подэлемент имеет слушателя, который обращается к дочерней панеле (через getParent()) и вызывает у неё некий метод, который уже в свою очередь чего-то там думает, и в случае успеха вызывает другой метод (отвечающий за логику обработки события) целевого элемента. Т.е. движение идет так: Целевой элемент (его слушатель) -> Дочерняя панель -> Целевой элемент(обработка события). Дело в том, что необходимо сделать мультиреакцию мыши на элементы, т.е в зависимости от состояния мышь может вызывать нормальную реакцию целевого элемента, ничего не вызывать, или вызывать некую универсальную реакцию, которая одинакова для элементов и обрабатывается уже на стороне JPanel, чтобы локализировать код(а не писать его во все слушатели подэлементов.). |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Вообще говоря parent это предок (родитель) а не дочь.
Схема легко реализуема, за исключением одного момента - вложенные компоненты должны знать метод, который вызывать. Если используется потомок JPanel, то нет проблем:
где someMethod() тот самый метод, который нужно позвать, а JSomePanel - имя класса панели, куда складывались компоненты. А вот если нужно обеспечить наличие метода у всех вложенных компонентов, то можно либо объявить и реализовать интерфейс, либо создать общего предка, который, кстати, может и заниматься вызовом метода предка. Я подобные вещи проделывал неоднократно. -------------------- Mirkes |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |