如何将文本放在 java 小程序的圆圈内,使文本的中间位于中心

How to place text inside a circle in java applet such that middle of the text comes at the center

我正在尝试编写代码,将文本放在圆的中间,使字符串的中心位于圆的中心。但是如果字符串的字体大小和圆的直径很大,文本似乎是从中心开始的。 这是我的代码,

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.*;
//extending Applet class is necessary
public class Main extends Applet{
public void paint(Graphics g)
    {
        g.setColor(Color.yellow);
        int diameter=500;
        int xpos=100,ypos=100;
        g.fillOval(xpos,ypos,diameter,diameter);
        Font f1 = new Font("Arial",Font.BOLD,24);
        g.setColor(Color.black);
        g.setFont(f1);
        String s="Text inside a circle";
        g.drawString(s,xpos+(diameter/2)-(s.length()/2),ypos+(diameter/2));

    }
}

这是我得到的输出:

但我希望文字位于中间。

But the text appears to start from the center

String 变量的长度只是 returnString 中的字符数,而不是 String 的宽度(以像素为单位)。

您需要知道文本的宽度(以像素为单位),以便它可以在圆圈中居中。为此,您使用 FontMetrics class.

FontMetrics fm = g.getFontMetrics();
int width = fm.stringWidth(s);
int offset = (diameter - width ) / 2;
g.drawString(s, xpos + offset, ypos + (diameter / 2));
//g.drawString(s,xpos+(diameter/2)-(s.length()/2),ypos+(diameter/2));

注意上面只会根据宽度居中。您还应该根据高度居中。为此,您可以使用 getStringBounds(...) 方法。这将使您也可以更好地近似垂直居中。这将 return 一个矩形,因此您可以将矩形的宽度和高度用于水平和垂直居中。

您将字符串输出从圆心向左移动,但移动值太小

-(s.length()/2

在字符中使用字符串长度。您可以根据字体大小(在您的情况下为 24)将此值乘以系数,但不同的字符具有不同的宽度(“Arial”不是固定宽度的字体)。

如果您需要更精确的定位,请考虑以像素为单位计算字符串宽度。也许getFontMetrics + stringWidthArbitrary found example