【问题标题】:Smoother scrolling in a JScrollPaneJScrollPane 中的平滑滚动
【发布时间】:2011-08-24 04:01:56
【问题描述】:

使用 JScrollPane 的滚动条箭头滚动(或通过设置箭头键的键绑定)将视口移动一个增量,暂停,然后平滑滚动。我遇到的大多数滚动条的行为都是一样的。有轻微的移动,暂停,然后更快的连续滚动。有什么办法可以避免暂停,让滚动从头到尾流畅?

【问题讨论】:

    标签: java swing jscrollpane jscrollbar


    【解决方案1】:

    关键事件的初始延迟和重复率由主机操作系统指定。用户经常在主机的(依赖于平台的)首选项控制面板中调整默认值。类似地,BasicScrollBarUI 的平台子类可能会进一步限制限制,例如com.apple.laf.AquaScrollBarUIjavax.swing.plaf.metal.MetalScrollBarUI

    由于这些设置可能是根深蒂固的或高度个性化的,因此随意的更改可能很难被接受。

    【讨论】:

    • 我正在开发用于 2D 游戏的 JScrollPane,因此暂停会使玩家的移动变得尴尬。我明白为什么您通常不想更改默认设置。
    【解决方案2】:

    BasicScrollBarUI 负责设置用于滚动的计时器。

    private final static int scrollSpeedThrottle = 60; // delay in milli seconds
    ...
    scrollListener = createScrollListener();
    scrollTimer = new Timer(scrollSpeedThrottle, scrollListener);
    scrollTimer.setInitialDelay(300);  // default InitialDelay?
    

    可以看到重复率比初始延迟快。

    所以我猜你需要创建一个自定义滚动条 UI 并覆盖该代码。

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 2015-06-19
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多