gpt4 book ai didi

java - 在 swt 复合单击上获取鼠标右键坐标

转载 作者:行者123 更新时间:2023-12-02 06:10:17 26 4
gpt4 key购买 nike

我正在使用 SWT 图形实现西洋跳棋图形。棋盘是一个 shell ,以棋盘图片为背景,每个棋子都在合适的位置表示为合成物(合成物有棋子的图像)。我向 shell 添加了一个 MouseListener

enter image description here

我还有一种将鼠标坐标转换为棋盘中某个位置的方法(例如:单击 (60,173) 意味着选择该位置 [1,4]< 中的方 block )。

我在空板上测试了该方法,效果很好,但现在当我添加碎片时,单击碎片时我无法从鼠标获取坐标。因此,我向每个复合 Material 添加了相同的监听器,但现在当鼠标单击它时,我得到了非常奇怪的坐标。看起来坐标是按合成图片的比例而不是 shell 的比例。现在,我的翻译方法在空方 block 点击上工作正常,但在非空方 block 点击上得到非常奇怪的结果。

我应该做什么来修复它?如何获得板 shell 比例中的复合点击坐标?

最佳答案

您可以通过 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());
}

或者通过以下方法将所有复合坐标标准化为显示坐标compoto.toDisplay(Point compositeCoOrd),然后相对于 shell 平移显示坐标。

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

关于java - 在 swt 复合单击上获取鼠标右键坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21957252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com