我开发了一种用于定位塔架信号强度的电信应用程序。我使用了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坐标作为圆的中心点来绘制圆圈。
答案 0 :(得分:38)
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
答案 1 :(得分:8)
所以我们都在做同样的家庭工作?
奇怪的是,最多投票的答案是错误的。请记住,draw / fillOval将高度和宽度作为参数,而不是半径。因此,要使用用户提供的x,y和radius值正确绘制和居中,您可以执行以下操作:
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);
}
答案 2 :(得分:7)
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坐标和半径。
答案 3 :(得分:6)
用
替换您的绘制线g.drawOval(X - r, Y - r, r, r)
这应该使您的圆圈的左上角成为使中心为(X,Y)
的正确位置,
至少只要点(X - r,Y - r)
具有范围内的两个组件。
答案 4 :(得分:3)
drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj)
答案 5 :(得分: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);
}
}
答案 6 :(得分:1)
这将以指定矩形为中心绘制圆弧。您可以绘制,半圆,四分之一圆等。
g.drawArc(x - r, y - r, r * 2, r * 2, 0, 360)
答案 7 :(得分:0)
两个答案都不正确。它应该是:
x-=r;
y-=r;
drawOval(x,y,r*2,r*2);
答案 8 :(得分:0)
唯一对我有用的事情是:
g.drawOval((getWidth()-200)/2,(getHeight()-200)/2, 200, 200);