Java 如何使用JScrollPane连续滚动
我使用一个JScrollPane来包含一个大型JPanel。当鼠标不在JScrollPane的范围内时,我希望它朝那个方向滚动。例如,如果JScrollPane的顶部位于(100100),而鼠标位于组件顶部上方,我希望它向上滚动 到目前为止,我发现: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
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毫秒)获取鼠标位置然后用它来计算?类似于或可能有帮助的东西