有没有办法为 ScrollPane 实现鼠标滚轮监听器?我看了几个选项:
- 视口似乎没有鼠标滚轮监听器
- 使用 gef 的 MouseWheelHelper 播放,但 y 值仅在我在 ScrollPane 内单击时发生变化,而不是在滚动鼠标滚轮时发生变化。虽然事件正在被触发。
此外,ScrollPane 没有设计为垂直滚动条。
好的,这里的神奇数字是 org.eclipse.swt.widgets.Event.count。这个数字告诉您“使用鼠标滚轮滚动的行数或页数”。结合这个和 MouseWheelHelper 界面,我能够使用鼠标滚轮进行滚动:
public class MyEditPart extends TreeEditPart implements MouseWheelHelper{
private static final int SCROLL_OFFSET = 10;
...
...
@Override
public void handleMouseWheelScrolled(Event event) {
pane.scrollVerticalTo(pane.getViewport().getVerticalRangeModel().getValue() + (event.count * SCROLL_OFFSET));
}
}
巧妙的是,通过更改 SCROLL_OFFSET 我可以控制视口滚动的速度。
唯一要检查的是 Event.count 的定义,它说:
取决于事件类型、未决的后续绘制事件的数量(在某些平台上可能始终为零),或者使用鼠标滚轮滚动的行数或页面数,或者鼠标被单击的次数
不确定这将如何在其他操作系统上发挥作用。