17

我在我的项目中添加了JPanel一个。JScrollPane

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

我的代码是:

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"));
4

2 回答 2

39

您可以使用这行代码设置滚动速度

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

于 2012-04-12T07:59:44.490 回答
0

之所以会出现此错误,是因为 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);
}

请注意,当它包含单个组件(如 a或)时,swing确实会正确计算滚动速度。此修复程序专门针对滚动窗格包含.JTableJTextAreaJPanel

于 2021-02-20T20:14:36.377 回答