如何提高 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 包含JTable
或JTextArea
之类的单个组件时,它确实会正确计算滚动速度。此修复程序专门针对滚动窗格包含 JPanel
时。
【讨论】:
以上是关于如何提高 JScrollPane 上的慢速滚动速度?的主要内容,如果未能解决你的问题,请参考以下文章
将 JScrollPane 滚动到 JTable 上的特定行 [重复]