2012-02-21 4 views
1

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

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

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

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

EDIT: Спасибо за подсказку: есть ли способ заставить обоих слушателей слушать? Поскольку прокрутка в scrollpane фактически используется по умолчанию. Так есть ли способ использовать его без какой-либо дополнительной реализации?

Благодарности & С уважением, Марк

ответ

2

Сделайте свой заказ слушателем отправки событий (которые он не хочет обрабатывать сам) к родителю отправителя, в конце концов, 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

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

  • Listener1 выполнения method1
  • Listener2 выполнения method2

Если Listener1 предотвратить Listener2 от прослушивания, вы просто должны позвонить method1 и method2 когда Listener1 срабатывает.

+0

Спасибо за ответ, есть также способ заставить обоих слушателей слушать? Подробнее см. – Marc

Смежные вопросы