在swt复合点击上获得鼠标右键

时间:2014-02-22 16:48:17

标签: java shell user-interface swt mouseevent

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

enter image description here

我还有一种方法可以将鼠标坐标转换为棋盘中的某个位置(例如:点击(60,173)表示选择地方[1,4]中的方块)。

我在一个空板上测试了这个方法并且工作得很好但是现在当我添加这些碎片时,我无法通过点击一块来获得鼠标的坐标。 所以我为每个复合添加了相同的监听器,但现在当鼠标点击它时我会得到非常奇怪的坐标。看起来像坐标是合成图片的比例,而不是shell。现在我的翻译方法在空方块点击上正常工作,但在非空方块点击时得到非常奇怪的结果。

我应该怎么做才能解决它? 如何在板壳刻度中获得复合点击坐标?

1 个答案:

答案 0 :(得分:1)

您可以通过shell.toControl()方法将所有显示坐标(发生鼠标单击的位置)转换为相对于shell的坐标。例如,

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)然后相对于shell转换显示co-ord。

当我不得不解决与你类似的问题时,我遇到了这两种方便的方法。希望这会有所帮助。