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

Java 在多个不同组件中使用事件,java,swing,user-interface,Java,Swing,User Interface,我有一个JscrollPane,里面有一个JPanel,我在上面画画。我想使用MouseWheelEvent来: 缩放(使用CTRL+Wheel)面板内容 和滚动滚动滚动窗格(仅使用滚轮) 每一个动作本身都是有效的,但我无法同时做到这两个。只要我将MouseWheelListener添加到JPanel,事件就不会到达JScrollPanels列表器 如果在JPanel中没有使用MouseWheelEvent,如何将它转发给JScrollPanes MouseWheelListener 编辑:

我有一个JscrollPane,里面有一个JPanel,我在上面画画。我想使用MouseWheelEvent来:

  • 缩放(使用CTRL+Wheel)面板内容
  • 和滚动滚动滚动窗格(仅使用滚轮)
每一个动作本身都是有效的,但我无法同时做到这两个。只要我将MouseWheelListener添加到JPanel,事件就不会到达JScrollPanels列表器

如果在JPanel中没有使用MouseWheelEvent,如何将它转发给JScrollPanes MouseWheelListener

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

谢谢和问候,
Marc

当您注册一个侦听器时,您会指定一个方法,以便在检测到特定行为时执行。假设我有:

  • Listener1执行方法1
  • Listener2执行方法2

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

使您的自定义侦听器将事件(它不希望自己处理)分派给发送者的父级,最终,滚动窗格将拾取它们:

    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;
        }
    };

谢谢你的回复,有没有办法让两位听众都听呢?请参见编辑。