在GUI中使用拖放时的精确定位

时间:2014-07-14 04:05:05

标签: java user-interface drag-and-drop swt windowbuilder

我正在尝试为使用WindowBuilder / SWT Designer创建的GUI实现拖放功能。目前,为了确定画布在画布上的确切位置,我使用

canvas.addPaintListener(new PaintListener() {
    public void paintControl(PaintEvent e) {
        int x = event.x - shell.getBounds().x - canvas.getBounds().x;
        int y = event.y - shell.getBounds().y - canvas.getBounds().y;
        e.gc.drawString(d, x, y);
    }
});

但这不是鼠标下降的精确定位,而是向右侧进一步。我怎样才能解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

您需要的只是非常有用的功能Control#toControl(int, int)

  

返回一个点,该点是将参数(在显示相对坐标中指定)转换为相对于接收器的坐标的结果。

canvas.addPaintListener(new PaintListener()
{
    public void paintControl(PaintEvent e)
    {
        Point point = canvas.toControl(event.x, event.y);
        e.gc.drawString(d, point.x, point.y);
    }
});

那就行了。