我正在 netbeans 中开发一个桌面应用程序,其中有一个编辑器类,它是具有 JScrollPane
的类的子类。 (JScrollPane
有两个 JScrollBar
:水平和垂直。)一切都按预期工作,包括能够使用鼠标滚轮垂直(无修饰符)和水平(通过使用移位修饰符)。
另一个父类(super class)(在我的类和 JScrollPane
类之间)实现缩放(通过菜单命令设置我的缩放(比例)系数,可以正常工作(包括滚动))。
我想要的是当 alt(选项)键按下(isAltDown()
为 true)时能够通过鼠标滚轮放大/缩小,否则回退到默认滚动(H&V)行为。这是我的类(class)设置代码的一部分:
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);
此设置代码正在被调用,但当我移动鼠标滚轮时(当光标位于我的 View 上时),永远不会调用 mouseWheelMoved
方法; View 继续正常滚动(水平和垂直)。
我还尝试向我的类添加“implements MouseWheelListener
”和 mouseWheelMoved
方法:
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
// (same as mouseWheelMoved above)
}
还是没有运气……我错过了什么? (编辑:删除了有关传播轮子事件的额外问题:在此回答:< How to implement MouseWheelListener for JPanel without breaking its default implementation? >)。
最佳答案
弄清楚了......设置代码应该是:
// add mouse-wheel support
JScrollPane scrollPane = getPanelScrollPane();
scrollPane.addMouseWheelListener(this);
然后将 implements MouseWheelListener
和这个 mouseWheelMoved
方法添加到我的类中:
@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 {
// if alt isn't down then propagate event to scrollPane
JScrollPane scrollPane = getPanelScrollPane();
scrollPane.getParent().dispatchEvent(e);
}
}
现在一切正常了!按下 alt(选项)鼠标滚轮可放大/缩小,不按下则面板滚动!
关于Java - 用鼠标滚轮滚动和缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44092225/