java - 如何使用 JScrollPane 连续滚动

标签 java swing scroll jscrollpane

我正在使用 JScrollPane 来包含一个大型 JPanel。当鼠标不在 JScrollPane 的范围内时,我希望它朝该方向滚动。例如,如果 JScrollPane 的顶部位于 (100, 100) 并且鼠标位于组件顶部上方,我希望它向上滚动。

到目前为止我发现了这个:

private Point origin;

在构造函数中...

addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
        origin = new Point(e.getPoint());
    }
});
addMouseMotionListener(new MouseAdapter() {
    public void mouseDragged(MouseEvent e) {
        if (origin != null) {
            JViewport viewPort = (JViewport) SwingUtilities.getAncestorOfClass(JViewport.class, Assets.adder.viewer);
            if (viewPort != null) {
                Rectangle view = viewPort.getViewRect();
                if (e.getX() < view.x) view.x -= 2;
                if (e.getY() < view.y) view.y -= 2;
                if (view.x < 0) view.x = 0;
                if (view.y < 0) view.y = 0;
                if (e.getX() > view.x + view.getWidth()) view.x += 2;
                if (e.getY() > view.y + view.getHeight()) view.y += 2;
                scrollRectToVisible(view);
            }
        }
    }
});

这有效,但仅在鼠标运动时有效,否则无效。当鼠标位于 JScrollPane 之外但又不移动时,如何使其工作?

最佳答案

查看 JComponent 类的 setAutoScrolls(...) 方法。

您可以使用:

panel.setAutoScrolls( true );

然后使用以下MouseMotionListener:

 MouseMotionListener doScrollRectToVisible = new MouseMotionAdapter() {
     public void mouseDragged(MouseEvent e) {
        Rectangle r = new Rectangle(e.getX(), e.getY(), 1, 1);
        ((JPanel)e.getSource()).scrollRectToVisible(r);
    }
 };
 panel.addMouseMotionListener(doScrollRectToVisible);

这个概念在 How to Use Scroll Panes 上的 Swing 教程中的 ScollDemo 示例中得到了演示。 .

关于java - 如何使用 JScrollPane 连续滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970216/

相关文章:

java - hashCode 如何与 Java 中的 HashMap 一起工作

java.lang.NoSuchMethodError : 'void org. thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor

java - JavaFX UI 组件的 Nimbus 式外观

javascript - 将 Accordion 滑动到浏览器顶部

java - 如何为这堆for循环指定一个通用公式来减少代码?

java - 具有多个参数的构造函数

Java Swingworker 和多线程

java - 如何在 JTextField 中显示淡灰色 "ghost text"?

javascript - 滚动脚本实现不起作用

css - Safari 水平滚动