【问题标题】:Exact Positioning When using Drag and Drop in GUI在 GUI 中使用拖放时的精确定位
【发布时间】:2014-07-14 04:05:05
【问题描述】:

我正在尝试为使用 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);
    }
});

但这并不是鼠标下落的精确定位,而是更靠近右侧。我怎样才能解决这个问题?谢谢。

【问题讨论】:

  • 请贴出完整的可测试代码sn-p。
  • @Baz 我已经添加了实现拖放的完整部分。在包含我的整个代码之前,我看不到它是如何可测试的......
  • 好吧,我的意思是:请发布一个完整但最少的代码 sn-p 来显示您的问题。如果无法在我自己的 IDE 中进行测试,很难判断发生了什么。
  • @Baz 好的,我已经添加了必要的内容。
  • 一旦我解决了其中一个问题,您的代码无法编译并引发异常...

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


【解决方案1】:

您所需要的只是非常有用的功能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);
    }
});

这样就可以了。

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多