如何提高 JScrollPane 上的慢速滚动速度?

Posted

技术标签:

【中文标题】如何提高 JScrollPane 上的慢速滚动速度?【英文标题】:How to increase the slow scroll speed on a JScrollPane? 【发布时间】:2012-04-24 13:31:42 【问题描述】:

我在我的项目中的JScrollPane 中添加JPanel

一切正常,但是在 JPanel 中使用 mouse-Wheel 进行鼠标滚动存在一个问题。它的滚动速度非常慢。如何让它更快?

我的代码是:

JPanel panel = new JPanel();

panel.setLayout(new BorderLayout());
objCheckBoxList = new CheckBoxList();
BaseTreeExplorer node = (BaseTreeExplorer)projectMain.objCommon.tree.getLastSelectedPathComponent();
if (node.getObject() != null) 
    cmbList.setSelectedItem(node.getParent().toString());
 else 
    if (node.toString().equalsIgnoreCase("List of attributes")) 
        cmbList.setSelectedIndex(0);
     else 
        cmbList.setSelectedItem(node.toString());
    


panel.add(objCheckBoxList);

JScrollPane myScrollPanel = new JScrollPane(panel);

myScrollPanel.setPreferredSize(new Dimension(200, 200));
myScrollPanel.setBorder(BorderFactory.createTitledBorder("Attribute List"));

【问题讨论】:

【参考方案1】:

你可以用这行代码设置你的滚动速度

myJScrollPane.getVerticalScrollBar().setUnitIncrement(16);
Here 是详细信息。

【讨论】:

感谢@mbaydar 的回复。【参考方案2】:

这个错误似乎是因为 swing 以像素而不是文本行来解释滚动速度。如果您正在寻找一种更易于接受的解决方案的替代方案,您可以使用以下函数来计算和设置实际所需的滚动速度(以像素为单位):

public static void fixScrolling(JScrollPane scrollpane) 
    JLabel systemLabel = new JLabel();
    FontMetrics metrics = systemLabel.getFontMetrics(systemLabel.getFont());
    int lineHeight = metrics.getHeight();
    int charWidth = metrics.getMaxAdvance();
            
    JScrollBar systemVBar = new JScrollBar(JScrollBar.VERTICAL);
    JScrollBar systemHBar = new JScrollBar(JScrollBar.HORIZONTAL);
    int verticalIncrement = systemVBar.getUnitIncrement();
    int horizontalIncrement = systemHBar.getUnitIncrement();
            
    scrollpane.getVerticalScrollBar().setUnitIncrement(lineHeight * verticalIncrement);
    scrollpane.getHorizontalScrollBar().setUnitIncrement(charWidth * horizontalIncrement);

请注意,当swing 包含JTableJTextArea 之类的单个组件时,它确实会正确计算滚动速度。此修复程序专门针对滚动窗格包含 JPanel 时。

【讨论】:

以上是关于如何提高 JScrollPane 上的慢速滚动速度?的主要内容,如果未能解决你的问题,请参考以下文章

jquery.jscrollpane.js滚动速度设置

将 JScrollPane 滚动到 JTable 上的特定行 [重复]

如何触发jScrollPane滚动到底部事件

如何在 JScrollPane 中居中垂直和水平滚动条?

Java / Swing:JScrollPane中的JTextArea,如何防止自动滚动?

用于移动触摸屏设备的 Ace 文本编辑器上的慢速滚动