[英]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.