Java 摆动滚动问题

Java 摆动滚动问题,java,swing,awt,Java,Swing,Awt,通过实现Java Swing可滚动界面查看JPEG图像时,我遇到了一个奇怪的问题 我的代码允许我使用鼠标左键在图像顶部绘制一个矩形。 如果我不触摸滚动条,一切正常 但我一向下滚动,就会在不同的位置绘制一个矩形。基本上,如果我移动自上而下的滚动条,图像就会用错误的y坐标绘制。如果向左向右滚动,图像将使用错误的x坐标绘制。这些x,y坐标重新表示左上角点(x,y)以开始绘制矩形 所以,在向下滚动并左键单击图像后,绘制一个y坐标为off的矩形。下面是我添加到其中一个面板中的事件,其中包含图像内容 pub

通过实现Java Swing可滚动界面查看JPEG图像时,我遇到了一个奇怪的问题

我的代码允许我使用鼠标左键在图像顶部绘制一个矩形。 如果我不触摸滚动条,一切正常

但我一向下滚动,就会在不同的位置绘制一个矩形。基本上,如果我移动自上而下的滚动条,图像就会用错误的y坐标绘制。如果向左向右滚动,图像将使用错误的x坐标绘制。这些x,y坐标重新表示左上角点(x,y)以开始绘制矩形

所以,在向下滚动并左键单击图像后,绘制一个y坐标为off的矩形。下面是我添加到其中一个面板中的事件,其中包含图像内容

public void mousePressed(MouseEvent m) {
   if (SwingUtilities.isLeftMouseButton(m)) {
      ....
      int y = m.getY(); //This y-coordinate is off whenever I scroll down the image.
      ...
   }
}
有人知道问题出在哪里吗?我的意思是我从MouseEvent得到y坐标,所以我希望它有正确的值


谢谢。

您希望得到什么坐标?这些值对我来说很有意义:向下滚动时,y坐标会增加,即使您在屏幕上的同一位置单击

滚动窗格中的组件对滚动窗格一无所知。因此,当单击发生时,y坐标与如果组件足够大,完全可见时单击的位置相匹配

如果要转换为滚动窗格的坐标系,可以执行以下操作:

public void mouseClicked( MouseEvent e )
{
  Point p = SwingUtilities.convertPoint( label, e.getX(), e.getY(), scrollPane );
  System.out.println( "Converted: " + p.x + ", " + p.y );
}

(编辑:只是一个注释,上面的代码假设
标签
是显示图像的组件)

像@Ash一样,无论滚动位置如何,我都会得到图像的局部坐标;您也可以在
paintComponent()
中检查矩形绘图。不,这不起作用,但我在滚动条中添加了一个侦听器,以便在每次移动滚动条时获取该值,然后将该值添加到正在绘制的矩形的点(x,y)上,它就起作用了。谢谢你引导我走上正确的道路来解决这个问题。