MouseDrag绘制Square不按预期工作

时间:2017-05-10 06:05:59

标签: java

 @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和paint组件的新手。想知道是否有人知道造成这种情况的原因和原因?

1 个答案:

答案 0 :(得分:1)

你需要考虑一些专业:

  1. 在鼠标单击时保存第一个坐标:x,y
  2. 保存鼠标拖动的最后一个坐标x2,y2
  3. 将min x和y坐标设置为setRect的起点:Math.min(x,x2);
  4. 使用坐标差的绝对值来计算矩形的高度和宽度:Math.abs(x-x2);
  5. 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);