@Override
public Shape getShape() {
final Rectangle2D.Double result = new Rectangle2D.Double();
result.setFrameFromDiagonal(getStart(), getEnd());
//FIX this is causing square to move when going opposite direction
result.setRect(result.getX(), result.getY(),
result.getHeight(), result.getHeight());
return result;
}
这是我使用 Rectangle2D.Double 绘制正方形的代码。 getStart() 和 getEnd() 是从 mouseDrag 事件返回的点。当我向右或向上拖动时,它会按预期工作并创建一个正方形。当我向左或向下拖动时,正方形会随着拖动而移动。我对 Java swing 和绘制组件相当陌生。想知道是否有人知道造成这种情况的原因以及原因?
最佳答案
您需要考虑一些专业:
- 保存鼠标单击时的第一个坐标:x,y
- 保存鼠标拖动 x2,y2 时的最后一个坐标
- 设置最小 x 和 y 坐标作为 setRect 的起点:Math.min(x,x2);
- 利用坐标差的绝对值计算矩形的高和宽:Math.abs(x-x2);
px = Math.min(x,x2);
int py = Math.min(y,y2);
int pw=Math.abs(x-x2);
int ph=Math.abs(y-y2);
result.setRect(px, py, pw, ph);
关于java - MouseDrag 绘制的正方形未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43884687/