在多个不同组件中使用事件

时间:2012-02-21 14:45:10

标签: java swing user-interface

我有一个JscrollPane,它包含我绘制的JPanel。我想使用MouseWheelEvent:

  • 缩放(使用CTRL + Wheel)面板内容
  • 并滚动滚动窗格(仅使用滚轮)

每个动作本身都有效,但我不能让它们都起作用。只要我将MouseWheelListener添加到JPanel,该事件就不会到达JScrollPanels列表器。

如果未在JPanel中使用过,那么如何将MouseWheelEvent转发到JScrollPanes MouseWheelListener?

编辑:感谢提示:是否还有一种方法可以让两个听众都听?因为滚动窗格中的滚动实际上是默认实现的。那么有没有办法在没有任何额外实现的情况下使用它?

谢谢&问候, 马克

2 个答案:

答案 0 :(得分: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 :(得分:1)

注册侦听器时,可以指定在检测到特定行为时执行的方法。假设我有:

  • Listener1正在执行method1
  • Listener2执行方法2

如果listener1阻止listener2监听,则只需在触发listener1时调用method1和method2。