[英]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#drawRect
和Graphics#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绘制矩形的一种方法,不是一个可行的例子。
让我为简洁改变从变量名startPoint
到sp
,并从controlPoint
到cp
,那么这些改变你的代码应该做的伎俩:
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.