Swing Scrollable问题

时间:2010-09-27 20:57:08

标签: java swing awt

我通过实现Java Swing Scrollable接口查看JPEG图像有一个奇怪的问题。

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

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

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

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坐标,所以我希望它具有正确的值。

感谢。

1 个答案:

答案 0 :(得分:1)

您期望获得什么样的坐标?这些值对我有意义:当你向下滚动时,即使你点击屏幕上的相同位置,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 );
}

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