我正在用SWT图形实现棋子图形。板是一个外壳,以板图片作为背景,每个部件在合适的位置表示为复合材料(该复合材料具有该部件的图像)。我在shell中添加了一个MouseListener。

我还有一个方法可以将鼠标坐标转换到棋盘中的某个位置(例如:在place [1,4]中单击表示选择方块)。
我在一个空的棋盘上测试了这个方法,它工作得很好,但是现在当我添加棋子时,当我点击一个棋子时,我无法从鼠标获得坐标。所以我给每个组合添加了相同的侦听器,但现在当鼠标单击它时,我会得到非常奇怪的坐标。看起来坐标是在合成图片的尺度上,而不是在外壳上。现在我的平移方法在空格点击上工作得很好,但在非空格点击上得到了非常奇怪的结果。
我应该怎么做才能修复它?如何在线路板外壳比例中获得复合点击坐标?
发布于 2014-02-23 21:11:56
您可以通过shell.toControl()方法将所有显示坐标(鼠标单击发生的位置)转换为相对于外壳的坐标。例如,
Display display = new Display();
Shell shell = new Shell(display);
....
@Override
public void mouseDoubleClick(MouseEvent e) {
// Translates display co-ord to shell co-ord.
shell.toControl(display.getCursorLocation());
}或者通过composite.toDisplay(Point compositeCoOrd)将所有合成坐标标准化为显示坐标,然后相对于外壳转换显示坐标。
当我不得不解决与您的问题类似的问题时,我偶然发现了这两个方便的方法。希望这能有所帮助。
https://stackoverflow.com/questions/21957252
复制相似问题