Java 在椭圆上画线

Java 在椭圆上画线,java,swing,awt,Java,Swing,Awt,我必须在椭圆形或圆形上写一篇文章 我有这个代码(我在Stackoverflow上找到的),但我不明白其中的一些要点 import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics; import javax.swing.JPanel; public class Panneau extends JPanel { @Override public void paintComponent(Gra

我必须在椭圆形或圆形上写一篇文章 我有这个代码(我在Stackoverflow上找到的),但我不明白其中的一些要点

import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Panneau extends JPanel {
    @Override
    public void paintComponent(Graphics g){
        // Declaration 
        String text = "test";
        int x = 100, y = 50;
        int ovalWidth = 50, ovalHeight = 50;

        // Draw circle
        g.setColor(Color.blue);
        g.fillOval(x-ovalWidth/2, y-ovalHeight/2,ovalWidth, ovalHeight);
        // I don't understand why x-ovalwidth/2 and y-ovalheight/2

        // Put text into circle
        FontMetrics fm = g.getFontMetrics();
        double textWidth = fm.getStringBounds(text, g).getWidth();
        // What is the job of getstringbounds 
        g.setColor(Color.white);
        g.drawString(text, (int) (x - textWidth/2),(int) (y + fm.getMaxAscent() / 2));
    } 
}

感谢您使用

因此,您告诉图形绘制一个圆,其中左上角位于x-(宽度的一半),y-(高度的一半)。原因是,它偏移圆,因此圆的中心位于(x,y)而不是左上角

(返回一个足够容纳字符串的矩形)


不用说,当您使用各种java类时,这些文档非常有帮助。

使用

因此,您告诉图形绘制一个圆,其中左上角位于x-(宽度的一半),y-(高度的一半)。原因是,它偏移圆,因此圆的中心位于(x,y)而不是左上角

(返回一个足够容纳字符串的矩形)


不用说,当您使用各种java类时,这些文档非常有帮助。

使用

因此,您告诉图形绘制一个圆,其中左上角位于x-(宽度的一半),y-(高度的一半)。原因是,它偏移圆,因此圆的中心位于(x,y)而不是左上角

(返回一个足够容纳字符串的矩形)


不用说,当您使用各种java类时,这些文档非常有帮助。

使用

因此,您告诉图形绘制一个圆,其中左上角位于x-(宽度的一半),y-(高度的一半)。原因是,它偏移圆,因此圆的中心位于(x,y)而不是左上角

(返回一个足够容纳字符串的矩形)



不用说,当您使用各种java类时,这些文档非常有帮助。

我不明白为什么要编写:x-ovalWidth/2,而不仅仅是x,我不知道GetStringBoundsy的工作很抱歉,刚刚注意到您的评论请确保您正在调用
super.paintComponent
,否则您将得到不需要的绘制工件我不明白我们为什么要编写:x-ovalWidth/2而不仅仅是x,我不知道GetStringBoundsy的工作抱歉,刚刚注意到您的评论请确保您正在调用
super.paintComponent
,否则您将得到不需要的绘制工件我不明白我们为什么要编写:x-ovalWidth/2而不仅仅是x,我不知道GetStringBoundsy的工作抱歉,刚刚注意到您的评论请确保您正在调用
super.paintComponent
,否则您将得到不需要的绘制工件我不明白我们为什么要编写:x-ovalWidth/2而不仅仅是x,我不知道GetStringBoundsy的工作抱歉,刚刚注意到您的评论请确保您正在调用
super.paintComponent
,否则您将得到如此多不需要的绘制工件,因此对于第一个,cercle的中心在(x,y)中,x,y是我们放置文本的位置,因为我看到g.drawString(text,(int)(x-textWidth/2),(int)(y+fm.getMaxAscent()/2));好的,所以你把圆心和文本的中心放在同一个位置(x,y),非常感谢,所以第一个圆心在(x,y),x,y是我们放置文本的位置,因为我看到g.drawString(text,(int)(x-textWidth/2),(int)(y+fm.getMaxAscent()/2));好的,所以你把圆心和文本的中心放在同一个位置(x,y),非常感谢,所以第一个圆心在(x,y),x,y是我们放置文本的位置,因为我看到g.drawString(text,(int)(x-textWidth/2),(int)(y+fm.getMaxAscent()/2));好的,所以你把圆心和文本的中心放在同一个位置(x,y),非常感谢,所以第一个圆心在(x,y),x,y是我们放置文本的位置,因为我看到g.drawString(text,(int)(x-textWidth/2),(int)(y+fm.getMaxAscent()/2));对,因此将圆心和文本中心放置在同一位置(x,y)
fillOval( x, y, width, height)

x - the x coordinate of the upper left corner of the oval to be filled.
y - the y coordinate of the upper left corner of the oval to be filled.
width - the width of the oval to be filled.
height - the height of the oval to be filled.
Returns:
a Rectangle2D that is the bounding box of the specified String in the
specified Graphics context.