【问题标题】:How do I speed up the scroll speed in a JScrollPane when using the mouse wheel?使用鼠标滚轮时如何加快 JScrollPane 中的滚动速度?
【发布时间】:2011-07-31 19:23:52
【问题描述】:

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

有什么想法吗?

【问题讨论】:

标签: java swing scroll jscrollpane mousewheel


【解决方案1】:

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

How to use Scroll Panes

【讨论】:

    【解决方案2】:

    我加快滚动速度的解决方案:

    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 的增加是必须的:否则滚动的行数将受限于屏幕的大小。

    【讨论】:

    • 我已经修复了代码,因此移除了 SHIFT 和 CTRL 标志以防止水平滚动。我确信 jdk 的家伙在我原来的帖子之后已经用 shift 键向 jdk 添加了水平滚动。反对者:如果解决方案现在对您有效,请删除您的反对意见,或者发表评论并解释仍然缺少的内容。
    【解决方案3】:

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

    试试这个

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

    【讨论】:

      【解决方案4】:

      您也可以使用它。

      SwingUtil.setScrollUnitIncrement(yourScrollPane);

      【讨论】:

      • 嗯 ... SwingUtil 是什么?假设该方法将给定 scrollPane 的增量设置为哪个值和哪个滚动条?
      【解决方案5】:

      如果你想设置鼠标滚轮滚动量独立于滚动条单元,你可以使用Mouse Wheel Controller

      【讨论】:

      • 我应该在我的项目中包含一个额外的类而不是编写一行代码,这有什么好处?
      • @ErickRobertson,它只是为了给你增加灵活性。默认滚动为单位增量值的 3 倍。例如,对于 JTable,单位增量默认为行高,因此默认滚动为 3 行。如果出于某种原因,您的要求是一次滚动一页或一次滚动 5 行,您不能仅通过操作单位值来实现。此外,每个 LAF 的默认行高可能不同。通过在相对基础上操纵滚动量,您可以获得更好的跨平台支持。
      • 值 '3'(滚动单位)来自系统控制面板,Java 尊重它,使您能够在系统范围内对其进行修改。
      【解决方案6】:

      你可以试试这个:

      myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);
      

      【讨论】:

      • 美丽。我还注意到这会影响滚动条中的向上和向下箭头,这也是非常需要的。
      • @AlizainPrasla - 初始化此滚动面板时。
      • 您会如何影响单击滚动框和滚动条中向上或向下箭头之间的区域?
      • @Rune - 滚动条似乎设置为鼠标位置,忽略单位增量值。
      • @AndreiPodoprîgora 您应该注意,更改此值只会更改使用鼠标滚轮(或其他允许滚动的设备)、箭头键和滚动条箭头滚动时的滚动速度。当拖动滚动条旋钮时,此值不会影响滚动窗格的移动速度。很难改变这个值。如果你想实现这一点,你应该向滚动条添加自定义调整监听器并更改它的值。
      【解决方案7】:

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

      scrollPane.getVerticalScrollBar().setUnitIncrement(20);
      

      【讨论】:

        【解决方案8】:

        您可以通过设置滚动条的单位增量来做到这一点。请参阅示例。

        yourScrollPane.getVerticalScrollBar().setUnitIncrement(16);
        

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-03
            • 1970-01-01
            相关资源
            最近更新 更多