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
的对象。要激活此对象的鼠标滚轮滚动,我必须在函数中添加一个侦听器。但是,当鼠标移动时,我也想在myClassMouseweelMoved
函数中得到通知
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);
}
MyMouseweelMoved
功能不再被通知:
@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 andmouseWheelMoved()
MyClass的函数不再工作,谢谢。你能解释一下为什么要这样做吗?现在我必须在我的主函数中添加它(MyClassInstance是myClass的一个实例)MyClassInstance.view.getCanvasComponent().addMouseWheelListener(MyClassInstance)代码>我不明白你在寻找什么样的解释:如果你没有注册你的监听器,应该如何调用它?这与yFiles无关。如果您不向按钮添加按钮单击侦听器,也不会调用它。是的,我理解,谢谢,但为什么我不调用wheelListener.addToCanvas(视图)代码>myClass的函数mouseWheelMoved
得到了很好的通知?我只是不相信这会起作用。相反,我想你已经把注释掉的行放在适当的位置上了,它们与我的建议完全相同:-)