【发布时间】:2017-10-20 21:25:55
【问题描述】:
我正在 netbeans 中开发一个桌面应用程序,其中我有一个编辑器类,它是具有JScrollPane 的类的子类。 (JScrollPane 有两个 JScrollBars:水平和垂直。)一切都按预期工作,包括能够使用鼠标滚轮垂直滚动(无修饰符)和水平滚动(使用 shift 修饰符)。
另一个超类(在我的类和JScrollPane 类之间)实现了缩放(通过菜单命令设置我的缩放(比例)因子可以正常工作(包括滚动))。
我想要的是能够在 alt(选项)键按下(isAltDown() 为真)时通过鼠标滚轮放大/缩小,否则回退到默认滚动(H&V)行为。这是我的课程设置代码的一部分:
JScrollPane scrollPane = getPanelScrollPane();
JScrollBar hsb = scrollPane.getHorizontalScrollBar();
JScrollBar vsb = scrollPane.getVerticalScrollBar();
MouseWheelListener mwl = new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.isAltDown()) {
double oldZoom = getZoom();
double amount = Math.pow(1.1, e.getScrollAmount());
if (e.getWheelRotation() > 0) {
//zoom in (amount)
setZoom(oldZoom * amount);
} else {
//zoom out (amount)
setZoom(oldZoom / amount);
}
} else {
// pass the event on to the scroll pane
getParent().dispatchEvent(e);
}
}
};
// add mouse-wheel support
hsb.addMouseWheelListener(mwl);
vsb.addMouseWheelListener(mwl);
此设置代码被调用,但当我移动鼠标滚轮时(光标在我的视图上),mouseWheelMoved 方法从未被调用;视图继续正常滚动 (H&V)。
我还尝试将“implements MouseWheelListener”和mouseWheelMoved 方法添加到我的班级:
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
// (same as mouseWheelMoved above)
}
仍然没有运气......我错过了什么? (编辑:关于传播轮子事件的额外问题已删除:在此处回答:How to implement MouseWheelListener for JPanel without breaking its default implementation?>)。
【问题讨论】:
标签: java netbeans scroll zooming mousewheel