Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JScrollPane连续滚动_Java_Swing_Scroll_Jscrollpane - Fatal编程技术网

Java 如何使用JScrollPane连续滚动

Java 如何使用JScrollPane连续滚动,java,swing,scroll,jscrollpane,Java,Swing,Scroll,Jscrollpane,我使用一个JScrollPane来包含一个大型JPanel。当鼠标不在JScrollPane的范围内时,我希望它朝那个方向滚动。例如,如果JScrollPane的顶部位于(100100),而鼠标位于组件顶部上方,我希望它向上滚动 到目前为止,我发现: private Point origin; 在构造函数中 addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { ori

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

到目前为止,我发现:

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);
            }
        }
    }
});
addMouseListener(新的MouseAdapter(){
公共无效鼠标按下(MouseEvent e){
原点=新点(如getPoint());
}
});
addMouseMotionListener(新的MouseAdapter(){
公共无效鼠标标记(鼠标事件e){
如果(原点!=null){
JViewport viewPort=(JViewport)SwingUtilities.getAncestorOfClass(JViewport.class,Assets.adder.viewer);
如果(视口!=null){
矩形视图=viewPort.getViewRect();
如果(e.getX()view.x+view.getWidth())view.x+=2;
如果(e.getY()>view.y+view.getHeight())view.y+=2;
scrollRectToVisible(视图);
}
}
}
});

这是可行的,但它只在鼠标移动时起作用,否则不起作用。当鼠标在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);

此概念在上的Swing教程中的
ScollDemo
示例中演示。

查看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);

在上的Swing教程中的
ScollDemo
示例中演示了此概念。

如何使用计时器(例如,每100毫秒)获取鼠标位置并使用它进行计算?类似或可能有帮助如何使用计时器(例如,每100毫秒)获取鼠标位置然后用它来计算?类似于或可能有帮助的东西