如何将文本放在 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 + stringWidth
。 Arbitrary found example
我正在尝试编写代码,将文本放在圆的中间,使字符串的中心位于圆的中心。但是如果字符串的字体大小和圆的直径很大,文本似乎是从中心开始的。 这是我的代码,
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 + stringWidth
。 Arbitrary found example