Java - 没有图形的 FontMetrics

Posted

技术标签:

【中文标题】Java - 没有图形的 FontMetrics【英文标题】:Java - FontMetrics without Graphics 【发布时间】:2011-02-20 01:52:53 【问题描述】:

如何在不使用 Graphics 的情况下获取 FontMetrics ?我想在构造函数中获取 FontMetrics,现在我这样做:

BufferedImage bi = new BufferedImage(5, 5, BufferedImage.TYPE_INT_RGB);
FontMetrics fm = bi.getGraphics().getFontMetrics(font);
int width = fm.stringWidth(pattern);
int height = fm.getHeight();

【问题讨论】:

为什么要在没有图形的情况下这样做? 我创建了自己的控件,我想在构造函数中设置 preffred 大小 这对于在无头模式下获取字体度量很有用,即一个将字体处理为位图的命令行工具。 【参考方案1】:

不,您不一定需要获取/使用图形对象:

Font font = new Font("Helvetica",Font.PLAIN,12);
Canvas c = new Canvas();
FontMetrics fm = c.getFontMetrics(font);

如果您现在调用 c.getGraphics(),它将返回 null。另一方面,画布解决方案也适用于headless mode。

【讨论】:

如果我可以稍微扩展一下 - 如果您正在从文件中读取字体,请记住“导出”具有可行大小的字体(不记得这样做会导致getMaxAscent/Descent 等值返回 1):Font sourceFont = Font.createFont(Font.TRUETYPE_FONT, fontStream);Font awtFont = sourceFont.deriveFont(72.0f);Canvas canvas = new Canvas();FontMetrics metrics = canvas.getFontMetrics(awtFont);【参考方案2】:

嗯...你需要图形来获得 FontMetrics 是很合乎逻辑的。字体高度、宽度等在不同的显示器上会有所不同。

如果你有一些 Component,你可以用它来获取 FontMetrics:

component.getFontMetrics(font);

【讨论】:

@amorfis 你确定字体宽度和高度取决于显示,而我已经指定了字体大小?

以上是关于Java - 没有图形的 FontMetrics的主要内容,如果未能解决你的问题,请参考以下文章

java 要输出格子图形该怎么编程 +---+---+ +---+---+

Java编写一个图形界面

在 Java 中为新图形清除屏幕 (awt)

JAVA学习之JAVA 2D图形绘制

Metasploitable有图形界面吗

Java从入门到精通!mysql图形化监控工具