Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск компонента под событие 
:(
    Опции темы
Prospekt
Дата 22.5.2014, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.5.2012

Репутация: нет
Всего: 1



Имеется некая переопределенная JPanel на которой находятся самописные элементы (наследники JComponent).

Необходимо сделать так, чтобы при одних условиях события мыши эти компоненты не обрабатывали, а при других обрабатывали.

Меня бы устроило, если бы флаг срабатывания содержался бы на моем JPanel и перед обработкой слушателя подкомпонента (того, который находится на этой панеле) предварительно проходил некий код на этой панеле, и только потом вызывался бы обработчик подэлемента (когда надо).

Думал, что события опускается по дереву, т.е. что каждая панель проверяет попадает ли мышь на какой-нибудь из её подэлементов, и если да, то делигирует вызов этому подэлементу. Все это работает до тех пор, пока не найдется самый нижний узел, который вызовет уже свой собственный слушатель.
А вот и фиг. 2 часа экспериментов с JPanel не дали результатов. Походу поиск целевого элемента происходит где-то в другом месте, и сама панель, содержащая целевой элемент никакого оповещения о событии мыши не получает.

Чего хочу от вас:
1. Кто подскажет сам процесс движения события и поиска для него целевого элемента.
2. Какими способами можно сделать то, что я описал?
3. Является ли ниже описанное решение единственно разумным?

Каждый подэлемент имеет слушателя, который обращается к дочерней панеле (через getParent()) и вызывает у неё некий метод, который уже в свою очередь чего-то там думает, и в случае успеха вызывает другой метод (отвечающий за логику обработки события) целевого элемента.
Т.е. движение идет так: Целевой элемент (его слушатель) -> Дочерняя панель -> Целевой элемент(обработка события).

Дело в том, что необходимо сделать мультиреакцию мыши на элементы, т.е в зависимости от состояния мышь может вызывать нормальную реакцию целевого элемента, ничего не вызывать, или вызывать некую универсальную реакцию, которая одинакова для элементов и обрабатывается уже на стороне JPanel, чтобы локализировать код(а не писать его во все слушатели подэлементов.).
PM MAIL   Вверх
Mirkes
Дата 23.5.2014, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 2
Всего: 17



Вообще говоря parent это предок (родитель) а не дочь.
Схема легко реализуема, за исключением одного момента - вложенные компоненты должны знать метод, который вызывать. Если используется потомок JPanel, то нет проблем:
Код

     ((JSomePanel)getParent()).someMethod();

где someMethod() тот самый метод, который нужно позвать, а JSomePanel - имя класса панели, куда складывались компоненты.
А вот если нужно обеспечить наличие метода у всех вложенных компонентов, то можно либо объявить и реализовать интерфейс, либо создать общего предка, который, кстати, может и заниматься вызовом метода предка.
Я подобные вещи проделывал неоднократно.


--------------------
Mirkes
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.