【问题标题】:Swing Scrollable problemSwing 可滚动问题
【发布时间】:2010-09-27 20:57:08
【问题描述】:

我在通过实现 Java Swing Scrollable 接口查看 JPEG 图像时遇到了一个奇怪的问题。

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

但只要我向下滚动,就会在不同的位置绘制一个矩形。基本上,如果我移动自上而下的滚动条,图像会以错误的 y 坐标绘制。如果左右滚动,则行为相同,图像会以错误的 x 坐标绘制。这些 x,y 坐标代表左上角 Point(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 坐标,所以我希望它具有正确的值。

谢谢。

【问题讨论】:

    标签: java swing awt


    【解决方案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是显示图像的组件)

    【讨论】:

    • 像@Ash一样,无论滚动位置如何,我都会获得图像局部坐标;你也可以在paintComponent() 中查看你的矩形图。
    • 不,这不起作用,但我向 ScrollBars 添加了一个侦听器,以便在每次移动它们时获取值,然后将该值添加到正在绘制的矩形的 Point(x,y) 和有效。感谢您引导我找到解决此问题的正确路径。
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多