【问题标题】:Java - Scroll and zoom with mouse wheel?Java - 使用鼠标滚轮滚动和缩放?
【发布时间】: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


    【解决方案1】:

    想通了……设置代码应该是:

        // 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(选项)向下鼠标滚轮放大/缩小,而不是向下滚动面板!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 2014-04-05
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2018-03-20
      相关资源
      最近更新 更多