我有一个问题,我必须用我的代码来解决。所以我有一个棋盘,当我点击我想拖动的东西(即棋盘)时,我会看到一个包含它图片的标签(我知道这不是一个简洁的解决方案,但我被告知这样做)在通过公式计算的适当位置。我想使用相同的公式来计算 mouseDragged 事件下检查器的坐标,但这就是问题所在。如果我只是通过事件中的简单 getX() 或 getY() 设置标签的位置,那么只要我移动鼠标,它的左上角就会在我的鼠标指针下“跳跃”。我希望它在我点击它的地方粘在光标上,所以我做了这样的事情:
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);
其中 col 是我要从中拖动检查器的列的 X 坐标(行也是如此),而 setX 只是我在下面使用的变量。这些计算对我来说似乎没问题,但它们使我只能以根本不动的方式拖动检查器(就像我拖动透明的东西一样),当我最终进入棋盘上的一个新位置时它被画在那里等等。不是流畅的拖动,但在拖动过程中它被绘制在我光标下的字段中。
+42 和 + 37 只是一些在适当位置进行计算的数字,因为棋盘不是从 (0,0) 开始的。