J'ai développé une application de télécommunication permettant de localiser la force des signaux des tours. J'ai utilisé Java Swing et je ne parviens pas à dessiner le cercle autour du point de la tour émettrice du signal mobile. J'ai déjà calculé les coordonnées X, Y ainsi que la valeur du rayon.
S'il vous plaît trouver le code ci-dessous que j'ai utilisé pour dessiner le cercle et il a des problèmes.
JPanel panelBgImg = new JPanel() {
public void paintComponent(Graphics g) {
g.drawOval(X, Y, r, r);
}
}
Le problème est que cela crée un cercle, mais il n’a pas pris les coordonnées X et Y comme point central. Il a pris les coordonnées X et Y comme point haut gauche du cercle.
Est-ce que quelqu'un pourrait m'aider à dessiner le cercle en ayant les coordonnées X et Y données comme point central du cercle?.
La fillOval
correspond à un ovale dans un rectangle, with width=r, height = r
vous obtenez un cercle . Si vous voulez que fillOval(x,y,r,r)
dessine un cercle avec le centre à (x, y), vous devrez déplacer le rectangle de la moitié de sa largeur et de la moitié de sa hauteur. .
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);
}
Cela va tracer un cercle avec le centre à x,y
Nous faisons donc tous le même travail à domicile?
Etrange comment la réponse la plus votée est fausse. Rappelez-vous que draw/fillOval prend hauteur et largeur en tant que paramètres et non en rayon. Donc, pour dessiner et centrer correctement un cercle avec les valeurs x, y et radius fournies par l'utilisateur, procédez comme suit:
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);
}
Remplacez votre ligne de tirage par
g.drawOval(X - r, Y - r, r, r)
Cela devrait faire du coin supérieur gauche de votre cercle le bon endroit pour que le centre soit (X,Y)
, Au moins tant que le point (X - r,Y - r)
a les deux composants dans la plage.
JPanel pnlCircle = new JPanel() {
public void paintComponent(Graphics g) {
int X=100;
int Y=100;
int d=200;
g.drawOval(X, Y, d, d);
}
};
vous pouvez changer les coordonnées X, Y et le rayon de ce que vous voulez.
drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj)
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);
}
}
Cela dessine un arc avec le centre dans le rectangle spécifié. Vous pouvez dessiner, demi-cercles, quarts de cercle, etc.
g.drawArc(x - r, y - r, r * 2, r * 2, 0, 360)
La seule chose qui a fonctionné pour moi:
g.drawOval((getWidth()-200)/2,(getHeight()-200)/2, 200, 200);
les deux réponses sont est incorrect. il devrait se lire:
x-=r;
y-=r;
drawOval(x,y,r*2,r*2);