如何以像素为单位计算字符串的宽度?

6
如何在Java中计算字符串的像素宽度?例如,我有一个字符串“Hello World!”。考虑其字体和大小,它的像素长度是多少?

你有特别的字体和字号吗? - Matthias
它可以是任何人。 - user2550754
我已编辑了你的格式,特别是删除了代码标记以缩短长度。 - s.bandara
1
请先查看绘制多行文本FontMetrics#stringWidth - MadProgrammer
你是否在询问与这个不同的问题? - devnull
这个可能也能回答你的问题。 - devnull
5个回答

5

简而言之:问题取决于您使用的框架。例如,如果您正在使用AWT,并且拥有一个Graphics对象graphics和一个Font对象font,则可以执行以下操作:

FontMetrics metrics = graphics.getFontMetrics(font);
int width = metrics.stringWidth("Hello world!");

点击这里了解更多信息。


2
你可以尝试像这样做:
Graphics2D g2d = ...
Font font = ...
Rectangle2D r = font.getStringBounds("hello world!", g2d.getFontRenderContext());
System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")");

请参考这个文档,或许能对您有所帮助。

看起来有点复杂,因为你可以使用 Graphics#getFontMetrics,但我会点赞给你,因为你与众不同 ;) - MadProgrammer

1

根据您想要实现的目标,有多种方法可供选择,例如...

BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
FontMetrics fm = g2d.getFontMetrics();
System.out.println(fm.stringWidth("This is a simple test"));
g2d.dispose();

但这只与BufferedImage及其Graphics上下文有关,它不会转换回屏幕或打印机等其他内容。
但是,只要您拥有Graphics上下文,就可以实现相同的结果。
显然,此示例使用为Graphics上下文安装的默认字体,如果需要,您可以更改它...

我只有一个 String。我知道它的长度、字体和字号。我想要计算它在像素上的大小。 - user2550754
好的,那么你可以使用类似上面的东西。宽度和高度取决于你正在渲染的Graphics上下文。虽然你有字体系列、字体大小和文本,但你缺少关键元素。 - MadProgrammer

0
你可以使用FontMetrics。FontMetrics类定义了一个字体度量对象,它封装了关于在特定屏幕上呈现特定字体的信息。
你可以像下面这样做:
    Font font = new Font("Verdana", Font.PLAIN, 10);  
    FontMetrics metrics = new FontMetrics(font) {  
    };  
    Rectangle2D bounds = metrics.getStringBounds("Hello World!", null);  
    int widthInPixels = (int) bounds.getWidth(); 

我有一种强烈的感觉,这不会起作用。像素大小将取决于您传递null的“Graphics”上下文... - MadProgrammer
不确定如何交叉验证结果,但当我运行它时,对于字符串“Hello World!”我得到了67作为输出。 - Aniket Thakur

0

有几种方法可以实现,如果文本在标签中,您可以尝试使用label.getElement().getClientWidth();。如果您正在使用AWT,则可以使用Graphics.getFontMetrics然后使用FontMetrics.stringWidth


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接