#java #swing #mousewheel #yfiles
#java #качать #mousewheel #yfiles
Вопрос:
Я использую библиотеку yFiles и обрабатываю объект Graph2DView с именем view
. Чтобы активировать прокрутку mouseWheel для этого объекта, я должен добавить слушателя в функцию registerViewListeners. Тем не менее, я также хочу получать уведомления и в mouseWheelMoved
функции MyClass, когда mouseweel
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 ...
}
}
Проблема:
Если я зарегистрирую свой view
объект через registerViewListeners
@Override
protected void registerViewListeners()
{
Graph2DViewMouseWheelScrollListener wheelListener = new Graph2DViewMouseWheelScrollListener();
wheelListener.addToCanvas(view);
}
Моя mouseWheelMoved
функция больше не уведомляется:
@Override
public void mouseWheelMoved(MouseWheelEvent e)
{
// not called
}
Комментарии:
1. Как вы регистрируете экземпляр
MyClass
? Вы говорите, что вы вызываетеview.getCanvasComponent().addMouseWheelListener(new MyClass())
, и вашmouseWheelMoved
единственный тогда не вызывается, когда вы дополнительно регистрируете прослушиватель по умолчанию?2. @Sebastian Спасибо. У MyClass есть
main
функция. В этой основной функции я создаю экземпляр MyClass, в этом экземпляре я создаю JFrame, инициализирую все свои данные …. и в КОНЦЕ я регистрирую своих слушателей, вызываяregisterViewListeners()
.wheelListener.addToCanvas(view)
возьмите все MouseWheel_Events, иmouseWheelMoved ()
функция MyClass больше не уведомляется
Ответ №1:
Ваше описание звучит так, как будто вы просто удалили регистрацию для вашего прослушивателя событий.
В том месте, где вы создаете экземпляр MyClass
, пожалуйста, также добавьте:
view.getCanvasComponent().addMouseWheelListener(myClassInstance); // register listener
Конечно, если вы не зарегистрируете своего слушателя, он не будет вызван. Только его создания будет недостаточно.
Комментарии:
1. это работает, спасибо. не могли бы вы объяснить мне, пожалуйста, почему это работает? теперь я должен добавить это в свою основную функцию (myClassInstance является экземпляром MyClass)
MyClassInstance.view.getCanvasComponent().addMouseWheelListener(MyClassInstance);
2. Я не понимаю, какое объяснение вы ищете: если вы не зарегистрируете своего слушателя, как его вообще следует вызывать? Это не связано с yFiles. Если вы не добавите прослушиватель нажатия кнопки к кнопке, он также не будет вызван.
3. да, я понимаю, спасибо, но почему, когда я не вызываю
wheelListener.addToCanvas(view);
функциюmouseWheelMoved
MyClass, она хорошо уведомляется?4. Я просто не верю, что это тоже сработает. Скорее, я предполагаю, что у вас были закомментированные строки, которые делают точно то же самое, что я предлагал 🙂