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的主要内容,如果未能解决你的问题,请参考以下文章