繁体   English   中英

如何使用鼠标拖动绘制矩形和椭圆形?

[英]How do you draw a rectangle and an oval using mouse dragging?

我了解如何使用MouseMotionListener,但无法正确绘制矩形和椭圆形的参数。

这是我尝试的矩形,但是问题是,如果从起点到左侧,则矩形会被填充。

public void draw(Graphics g) {

    g.drawRect((int)startPoint.getX(), (int)startPoint.getY(),(int)controlPoint.getX() - (int)startPoint.getX(),    (int) controlPoint.getY() - (int)startPoint.getY());

}

这是我转了一圈的方法,似乎工作正常。 但是我不能改变它使其形成一个椭圆形。

public void draw(Graphics g) {
    g.drawOval((int)startPoint.getX() - (int)controlPoint.distance(startPoint),((int)startPoint.getY() - (int)controlPoint.distance(startPoint)),
            (int)controlPoint.distance(startPoint)*2,(int)controlPoint.distance(startPoint)*2);
}

mousePressed必须是中心(startPoint),而拖动应是椭圆的半径。

  • Graphics#drawRectGraphics#drawOval期望参数表示x, y, width, height ,而不是x1, y1, x2, y2 ...
  • 您的起点可能大于终点,导致宽度和/或高度之一或两者均为负值(基于width = x1 - x2 )。 Graphics API不太喜欢负值。 在计算起点和尺寸时,需要考虑到这一点。

问题的结局可以通过以下方式解决:

int minX = Math.min(currentX, startX);
int minY = Math.min(currentY, startY);
int maxX = Math.max(currentX, startX);
int maxY = Math.max(currentY, startY);

int x = minX;
int y = minY;
int width = maxX - minX;
int height = maxX - minX;

看一下Java绘制矩形的一种方法,不是一个可行的例子。

让我为简洁改变从变量名startPointsp ,并从controlPointcp ,那么这些改变你的代码应该做的伎俩:

int minX = Math.min(sp.x, sp.y);
int minY = Math.min(sp.x, sp.y);
int width = Math.abs(cp.x - sp.x);
int height = Math.abs(cp.y - sp.y);

g.drawRect(minX, minY, width, height);
g.drawOval(minX, minY, width, height);

原因是这些方法应该接收左上角的坐标,以及所绘制的矩形/椭圆形的边界框的宽度和高度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM