簡體   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