23

我开发了一个用于定位信号塔信号强度的电信应用程序。我使用了 java swing,在移动信号发射塔位置的给定点周围绘制圆圈时遇到问题。我已经计算了 X、Y 坐标和半径值。

请找到我用来绘制圆圈的以下代码,它有问题。

JPanel panelBgImg = new JPanel() {
    public void paintComponent(Graphics g) {
        g.drawOval(X, Y, r, r);
    }
}

问题是,它创建了圆,但没有将 X 和 Y 坐标作为中心点。它将 X 和 Y 坐标作为圆的左上角。

任何人都可以通过将给定的 X 和 Y 坐标作为圆的中心点来帮助我绘制圆。

4

9 回答 9

44

适合矩形内的fillOval椭圆形,with width=r, height = r您会得到一个圆形。如果你想fillOval(x,y,r,r)画一个圆心在 (x,y) 的圆,你必须将矩形移动一半宽度和一半高度。

public void drawCenteredCircle(Graphics2D g, int x, int y, int r) {
  x = x-(r/2);
  y = y-(r/2);
  g.fillOval(x,y,r,r);
}

这将绘制一个中心为x,y

于 2013-10-15T17:18:33.937 回答
10

所以我们都在做同样的家庭作业?

奇怪的是,投票最多的答案是错误的。请记住,draw/fillOval 将高度和宽度作为参数,而不是半径。因此,要使用用户提供的 x、y 和半径值正确绘制圆并使其居中,您可以执行以下操作:

public static void drawCircle(Graphics g, int x, int y, int radius) {

  int diameter = radius * 2;

  //shift x and y by the radius of the circle in order to correctly center it
  g.fillOval(x - radius, y - radius, diameter, diameter); 

}
于 2015-03-02T10:02:28.533 回答
6

用你的画线替换

g.drawOval(X - r, Y - r, r, r)

这应该使圆的左上角成为使中心成为 的正确位置(X,Y),至少只要该点(X - r,Y - r)的两个分量都在范围内。

于 2013-10-15T17:10:08.640 回答
3
drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj) 
于 2017-01-30T23:47:48.703 回答
2
JPanel pnlCircle = new JPanel() {
        public void paintComponent(Graphics g) {
            int X=100;
            int Y=100;
            int d=200;
            g.drawOval(X, Y, d, d);
        }
};

您可以更改您想要的 X、Y 坐标和半径。

于 2018-03-18T07:29:28.180 回答
1

两个答案都不正确。它应该是:

x-=r;
y-=r;


drawOval(x,y,r*2,r*2);
于 2014-11-18T12:27:13.207 回答
1
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Graphics;
import javax.swing.JFrame;

public class Graphiic
{   
    public Graphics GClass;
    public Graphics2D G2D;
    public  void Draw_Circle(JFrame jf,int radius , int  xLocation, int yLocation)
    {
        GClass = jf.getGraphics();
        GClass.setPaintMode();
        GClass.setColor(Color.MAGENTA);
        GClass.fillArc(xLocation, yLocation, radius, radius, 0, 360);
        GClass.drawLine(100, 100, 200, 200);    
    }

}
于 2017-11-06T20:30:26.573 回答
1

这将在指定的矩形中绘制一个圆心。你可以画,半圆,四分之一圆等。

g.drawArc(x - r, y - r, r * 2, r * 2, 0, 360)
于 2018-12-28T10:48:16.033 回答
0

唯一对我有用的东西:

g.drawOval((getWidth()-200)/2,(getHeight()-200)/2, 200, 200);    
于 2014-12-10T12:08:28.737 回答