2013-06-24 44 views
0

我有一個問題,我必須用我的代碼解決。所以我有一個棋盤,當我點擊我想拖動的東西時(例如檢查器),我就可以看到一張標籤,裏面保存着它的圖片(我知道這不是一個整潔的解決方案,但我被告知要這樣做)在由公式計算的適當位置。我想使用相同的公式來計算mouseDragged事件下檢查器的座標,但這是問題所在。如果我只是通過事件中的簡單getX()或getY()來設置標籤的位置,那麼當我移動鼠標時,它的左上角是我的鼠標指針下的「跳躍」。我想它粘到光標我點擊它的地方,所以我做了這樣的事情:在Swing中拖動一個對象

public void mouseDragged(MouseEvent evt) { 
     int col = (evt.getX() - 4)/40; 
     int row = (evt.getY() - 4)/40; 
     int setX = evt.getX()-(col*40); 
     int setY = evt.getY()-(row*40); 
     if (dragged) 
      inv.setLocation(evt.getX()-setX+42, evt.getY()-setY+37); 

其中山坳是列的X座標我想糖衣片從檢查(等是行),setX只是我在下面使用的一個變量。這些計算對我來說似乎沒有問題,但是它們讓我只能以一種根本不移動的方式來填塞棋子(就像我拖着透明的東西一樣),當我最終進入棋盤上的新位置時它被塗在那裏等等。不是流暢的拖拽,但拖拽時會拖拽到光標下的字段中。

+42和+37只是一些數字來計算它在適當的地方,因爲董事會不是從(0,0)開始。

+0

參見本[示例](http://stackoverflow.com/a/2562685/230513)和[變化](HTTP:/ /stackoverflow.com/a/2563350/230513)。 – trashgod

回答

1

檢查器的角落「跳」到鼠標的原因是由於圖像的繪製方式。當您設置圖像的座標時,您將設置圖像的點P(0,0),即在屏幕上繪製時的左上角。

要解決這個問題,除了跟蹤行號和列號之外,還需要跟蹤每個棋盤「單元格中鼠標移動時要維護的x和y偏移量(以像素爲單位) 」。

這意味着當您單擊時,您可以單擊第2行第3列中的檢查器,並使用(12,14)的(x,y)偏移量。我假設你的方塊大於14x14像素。

我把你的42,進入BOARD_X_OFFSET和37到BOARD_Y_OFFSET 我已經添加了兩個雙打cellX和小區j持有的細胞內的偏移量。

這會讓你設定的位置類似於此:

inv.setLocation(evt.getX()-setX+BOARD_X_OFFSET+cellX, evt.getY()-setY+BOARD_Y_OFFSET+cellY);