使用鼠标滚轮时,如何加快JScrollPane中的滚动速度?

时间:2011-04-07 15:21:11

标签: java swing scroll jscrollpane mousewheel

我看到方法JScrollPane.setWheelScrollingEnabled(boolean)启用或禁用鼠标滚轮滚动。有没有办法调整滚动的速度?在我看来,这是非常缓慢的。无论我制作什么尺寸的窗口,滚动每次点击大约三个像素。我希望它远不止于此。

有什么想法吗?

9 个答案:

答案 0 :(得分:177)

你可以试试这个:

myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);

答案 1 :(得分:11)

一种方法是将滚动条的单位增量设置为更大的数字:

scrollPane.getVerticalScrollBar().setUnitIncrement(20);

答案 2 :(得分:10)

如果要设置独立于滚动条单位数量的鼠标滚轮滚动量,可以使用Mouse Wheel Controller

答案 3 :(得分:8)

您可以通过设置ScrollBar的单位增量来完成此操作。参见示例。

yourScrollPane.getVerticalScrollBar().setUnitIncrement(16);

答案 4 :(得分:1)

快速搜索此页面:How to increase the JScrollPane scrolling speed for mousewheel users。事实证明,滚动增量是滚动条本身(JScrollBar.setUnitIncrement)的属性,而不是滚动窗格。

答案 5 :(得分:0)

我试图找到一种更好的方法来读取ScrollPane中的32000行

试试这个

scrollPane.getVerticalScrollBar().setUnitIncrement(100); scrollPane.getViewport().putClientProperty("EnableWindowBlit", Boolean.TRUE); scrollPane.getViewport().setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);

答案 6 :(得分:0)

为了更精确地控制,要滚动的组件可以实现Scrollable接口。这样,您就可以动态计算滚动单元的大小(箭头按钮和箭头键)和滚动块的大小(鼠标轮)。

How to use Scroll Panes

答案 7 :(得分:-1)

您也可以使用它。

SwingUtil.setScrollUnitIncrement(yourScrollPane);

答案 8 :(得分:-1)

我加速滚动的解决方案:

  1. 添加滚动条的参数:

    scrollPane.getVerticalScrollBar()。putClientProperty(" JScrollBar.fastWheelScrolling",true);

  2. 实现一个轮子监听器(在jViewport内部的组件上):

    public void mouseWheelMoved(MouseWheelEvent e) {
        boolean isCtrl = (e.getModifiersEx() & MouseWheelEvent.CTRL_DOWN_MASK) != 0;
        boolean isShift = (e.getModifiersEx() & MouseWheelEvent.SHIFT_DOWN_MASK) != 0;
    
        MouseWheelEvent eventToDispatch = e;
        if (isCtrl || isShift) {
            int amountMulti = 1;
            int rotMulti = 1;
            if (isCtrl) {
                amountMulti *= 10;
                if (isShift) {
                    amountMulti *= 5;
                    rotMulti *= 2;
                }
            }
            int mod = e.getModifiers() & ~InputEvent.CTRL_MASK & ~InputEvent.SHIFT_MASK;
            int modEx = e.getModifiersEx() & ~MouseWheelEvent.CTRL_DOWN_MASK & ~MouseWheelEvent.SHIFT_DOWN_MASK;
            eventToDispatch = new MouseWheelEvent(this, e.getID(), e.getWhen()
             , mod | modEx, e.getX(), e.getY()
             , e.getXOnScreen(), e.getYOnScreen(), e.getClickCount(), e.isPopupTrigger()
             , e.getScrollType(), e.getScrollAmount()*amountMulti, e.getWheelRotation()*rotMulti
             , e.getPreciseWheelRotation()*amountMulti*rotMulti);
        }
    
        getParent().dispatchEvent(eventToDispatch);
    }
    

    必须增加wheelRotation:否则滚动线的数量将限制为屏幕尺寸。