2014-02-22 54 views
0

我正在用SWT圖形實現跳棋圖形。董事會是一個背景板的圖片作爲背景,每件作品在一個合適的地方(複合材料有一個圖像的片段)代表。我在shell中添加了一個MouseListener在swt複合上獲取正確的鼠標座標

enter image description here

我也有翻譯鼠標座標在板的地方的方法(例如:點擊(60,173)指的是在地方[1,4]選擇平方)。

我在一個空板測試的方法和它的工作得很好,但現在,當我加個我不能從鼠標上的一塊時,點擊獲取座標。 因此,我爲每個組合添加了相同的偵聽器,但是現在當鼠標單擊它時,我會得到非常奇怪的座標。看起來像座標是按照比例縮放到合成圖片而不是殼。現在我的翻譯方法在空方塊點擊上工作正常,但在非空方塊點擊時獲得非常奇怪的結果。

我應該爲修復它做什麼? 我怎樣才能在板殼比例尺中獲得複合點擊座標?

+1

如果您爲每個組合添加了一個偵聽器,是否不知道用戶點擊的位置?你爲什麼需要座標? – Baz

+0

我創建了一個循環中的複合材料,而不控制它們的位置。只設置邊界以適應棋盤上的正確位置。如果你想問什麼,我沒有一個複合數組。 我可以使用偵聽器來獲取合成位置嗎? –

+0

如果有幫助,您可以使用它來獲取組合本身。 – Baz

回答

1

您可以將所有的顯示座標(鼠標點擊發生的位置)到相對座標轉換爲通過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(點compositeCoOrd)顯示座標,然後相對於所述外殼的顯示共ORD平移。

我遇到這兩種方法得心應手來到時,我不得不修復類似你這樣的問題。希望這可以幫助。