java - MouseDrag 绘制的正方形未按预期工作

标签 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 和绘制组件相当陌生。想知道是否有人知道造成这种情况的原因以及原因?

最佳答案

您需要考虑一些专业:

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

相关文章:

java - Maven 在 Google App Engine 上自动部署

java - 处理 JTextPane 上的超链接右键单击

java - mongodb - 如何使用 mongodb java 客户端锁定集合

java - 如何减少这个程序的执行时间

java - 在 Java 中查找最长的正则表达式匹配?

java - 交换 2 个特定的 JButton

java - 使用 Spring 在 JSP 上显示值列表

java - 测试是否与 double 相等

java - 如何判断一条SQL语句是查询还是更新?

java - 已弃用的 ManagedQuery() 问题