Java 如何捕捉/转发鼠标滚轮事件到多个对象?

Java 如何捕捉/转发鼠标滚轮事件到多个对象?,java,swing,mousewheel,yfiles,Java,Swing,Mousewheel,Yfiles,我正在使用库并处理一个名为view的对象。要激活此对象的鼠标滚轮滚动,我必须在函数中添加一个侦听器。但是,当鼠标移动时,我也想在myClassMouseweelMoved函数中得到通知 public class MyClass extends MyBaseClass implements MouseWheelListener { Graph2DView view; // ..... @Override protected void registe

我正在使用库并处理一个名为
view
的对象。要激活此对象的鼠标滚轮滚动,我必须在函数中添加一个侦听器。但是,当鼠标移动时,我也想在myClass
MouseweelMoved
函数中得到通知

public class MyClass extends MyBaseClass implements MouseWheelListener {
    
    Graph2DView view;  
    // ..... 

    @Override
    protected void registerViewListeners()   
    {  
         Graph2DViewMouseWheelScrollListener wheelListener = new Graph2DViewMouseWheelScrollListener();
         wheelListener.addToCanvas(view);
    
         // The two precedent instruction is equivalent to 
         // view.getCanvasComponent().addMouseWheelListener(this);
    }

    @Override
    public void mouseWheelMoved(MouseWheelEvent e) 
    {    
        // some work ...
    }  
}  
问题
如果我通过
registerViewListeners

 @Override
 protected void registerViewListeners()   
 {  
    Graph2DViewMouseWheelScrollListener wheelListener = new Graph2DViewMouseWheelScrollListener();
    wheelListener.addToCanvas(view);
 }
My
MouseweelMoved
功能不再被通知:

@Override
public void mouseWheelMoved(MouseWheelEvent e) 
{    
    // not called
}  

您的描述听起来好像只是删除了事件侦听器的注册

在实例化MyClass的地方,请添加:

 view.getCanvasComponent().addMouseWheelListener(myClassInstance); // register listener

如果你不注册你的监听器,它当然不会被调用。仅实例化它是不够的。

如何注册
MyClass
的实例?您是说您正在调用
view.getCanvasComponent().addMouseWheelListener(new MyClass())
,并且您的
mouseWheelMoved
只有在您另外注册默认侦听器时才会被调用?@Sebastian谢谢。myClass有一个
main
函数。在这个主函数中,我创建了myClass的一个实例,在这个实例中,我创建了一个JFrame,初始化了我的所有数据。。。。最后,我通过调用
registerViewListeners()
来注册我的侦听器
wheelListener.addToCanvas(视图)
take all MouseWheel\u Events and
mouseWheelMoved()
MyClass的函数不再工作,谢谢。你能解释一下为什么要这样做吗?现在我必须在我的主函数中添加它(MyClassInstance是myClass的一个实例)
MyClassInstance.view.getCanvasComponent().addMouseWheelListener(MyClassInstance)我不明白你在寻找什么样的解释:如果你没有注册你的监听器,应该如何调用它?这与yFiles无关。如果您不向按钮添加按钮单击侦听器,也不会调用它。是的,我理解,谢谢,但为什么我不调用
wheelListener.addToCanvas(视图)myClass的函数
mouseWheelMoved
得到了很好的通知?我只是不相信这会起作用。相反,我想你已经把注释掉的行放在适当的位置上了,它们与我的建议完全相同:-)