Используйте событие в нескольких разных компонентах - PullRequest
1 голос
/ 21 февраля 2012

У меня есть JscrollPane, который содержит JPanel, на котором я рисую.Я хотел бы использовать MouseWheelEvent для:

  • увеличения (с помощью CTRL + колеса) содержимого панели
  • и для прокрутки панели прокрутки (только с колесом)

Каждое действие само по себе работает, но мне не удается заставить оба работать.Как только я добавляю MouseWheelListener в JPanel, событие не поступает в список JScrollPanels.

Как я могу заставить MouseWheelEvent пересылать JScrollPanes MouseWheelListener, если он не использовался в JPanel?

РЕДАКТИРОВАТЬ: Спасибо за подсказку: есть ли способ заставить слушателей слушать?Поскольку прокрутка в области прокрутки фактически реализована по умолчанию.Так есть ли способ использовать его без какой-либо дополнительной реализации?

Спасибо и С уважением, Марк

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Сделайте так, чтобы ваш пользовательский слушатель отправлял события (которые он не хочет обрабатывать сам) родительскому элементу отправителя, в конце концов scrollPane заберет их:

    final MouseWheelListener wheel = new MouseWheelListener() {

        @Override
        public void mouseWheelMoved(MouseWheelEvent e) {
            if (shouldHandleHere(e)) {
                LOG.info("do-my-own-stuff");
            } else {
                LOG.info("dispatch-to-parent");
                e.getComponent().getParent().dispatchEvent(e);
            } 
        }

        public boolean shouldHandleHere(MouseWheelEvent e) {
            return (e.getModifiersEx() & MouseWheelEvent.CTRL_DOWN_MASK) != 0;
        }
    };
1 голос
/ 21 февраля 2012

Когда вы регистрируете слушателя, вы назначаете метод для выполнения при обнаружении определенного поведения. Предположим, у меня есть:

  • Слушатель1, выполняющий метод1
  • Слушатель2, выполняющий метод2

Если слушатель1 не позволяет слушателю2 прослушивать, вам просто нужно вызвать method1 и method2, когда слушатель1 запущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...