首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -使用鼠标滚轮滚动和缩放?

Java -使用鼠标滚轮滚动和缩放?
EN

Stack Overflow用户
提问于 2017-05-21 09:03:12
回答 1查看 4.2K关注 0票数 2

我正在用netbeans开发一个桌面应用程序,其中有一个编辑器类,它是一个具有JScrollPane的类的子类。(JScrollPane有两个JScrollBars:水平和垂直。)一切都按预期工作,包括能够使用鼠标滚轮垂直滚动(没有修改器)和水平滚动(通过使用shift修改器)。另一个超类(在我的类和JScrollPane类之间)实现了缩放(通过菜单命令设置我的缩放(缩放)因子,它工作得很好(包括滚动))。我想要的是能够在alt (选项)键按下(isAltDown()为true)时通过鼠标滚轮进行放大/缩小,否则可以回退到默认的滚动(H&V)行为。下面是我的类设置代码的一部分:

代码语言:javascript
复制
            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方法添加到我的类中:

代码语言:javascript
复制
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
    // (same as mouseWheelMoved above)
}

还是不走运…我遗漏了什么?(编辑:有关传播轮子事件的附加问题已删除:在此处回答:<How to implement MouseWheelListener for JPanel without breaking its default implementation?>)。

EN

回答 1

Stack Overflow用户

发布于 2017-05-21 10:22:26

弄清楚了,…设置代码应为:

代码语言:javascript
复制
    // add mouse-wheel support
    JScrollPane scrollPane = getPanelScrollPane();
    scrollPane.addMouseWheelListener(this);

然后将implements MouseWheelListener和这个mouseWheelMoved方法添加到我的类中:

代码语言:javascript
复制
 @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 (选项),鼠标滚轮可以放大/缩小,而不是向下滚动面板!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44092225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档