Добавить «неактивный» прослушиватель мыши

Мистер Корбел был готов, большое спасибо

У меня есть прослушиватель мыши на JPanel, и он работает правильно. Я пытаюсь добавить некоторую поддержку опрокидывания в JLabel, но когда я добавляю прослушиватель мыши в JLabel, прослушиватель мыши JPanel перестает получать события, когда прослушиватель мыши метки получает события.

Я просто хочу добавить прослушиватель мыши в JLabel, не блокируя прослушиватель мыши JPanel под ним. Спасибо.

Бонусная проблема! Я хотел бы сделать getComponentAt(Point p) и получить компонент внизу, а не на самом верху, есть предложения? У меня есть обходной путь для этого, поэтому эта часть не важна, но мне не нравятся обходные пути. Еще раз спасибо.


person Jeremy    schedule 08.01.2012    source источник
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 08.01.2012
comment
Для бонусной задачи у вас должна быть новая публикация. Слишком сложно обсуждать несколько вопросов в одном посте.   -  person camickr    schedule 08.01.2012
comment
Нет, спасибо Эндрю и cami, это не серьезная проблема, поэтому я просто добавил ее на случай, если смогу получить ответ.   -  person Jeremy    schedule 08.01.2012


Ответы (2)


пожалуйста, ваш JLabel можно перемещать/перетаскивать, в других случаях ваш вопрос не имеет для меня реального смысла, потому что самые глубокие JComponenet в иерархии по умолчанию используют Focus/MouseListeners, в любом случае посмотрите на SwingUtilities, есть методы, которые могут возвращать относительные координаты родителю

person mKorbel    schedule 08.01.2012
comment
Спасибо. да он подвижный. Я пройду по вашей ссылке. - person Jeremy; 08.01.2012
comment
Вот оно. Я пытался использовать getComponent.getParent.... но я получил NPE, когда вытащил. С этим я могу тянуть, и мне не нужно, чтобы родитель справился с перетаскиванием, да, прибил его. - person Jeremy; 08.01.2012

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

Да, именно так работает обработка событий мыши. Только первый компонент, у которого есть прослушиватель, получит событие. Было бы не очень эффективно продолжать передавать событие вверх по иерархии компонентов каждому компоненту.

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

Вы можете обработать это в прослушивателе мыши, прикрепленном к метке, а затем повторно отправить событие на родительскую панель. Ознакомьтесь с dispatchEvent(...) класса Component в API для получения дополнительной информации.

person camickr    schedule 08.01.2012