【问题标题】:Java Graphics: Constructing FontMetrics from Font, without a Graphics2DJava Graphics:从 Font 构造 FontMetrics,没有 Graphics2D
【发布时间】:2012-05-27 12:26:15
【问题描述】:

已知

给定FontMetrics

FontMetrics 有一个来自 Font 的受保护构造函数。

问题:

给定一个Font 对象,有没有办法在不经过Graphics2D.setFontGraphics2D.getFontMetric() 的情况下构造一个FontMetrics 对象?

上下文

我正在使用类似 TeX 的渲染算法。我需要为 *.pfb 文件中的各种字符计算边界框等。我可以从 *.pfb 文件构造一个 Font 对象。我需要一个FontMetrics 对象来获取上升、下降、宽度。我必须构造一个未使用的中间 Graphics 对象才能获得FontMetrics,这似乎很丑陋。

【问题讨论】:

  • FontMetrics setFont?的可能重复
  • 为什么是重复的?那家伙使用图形对象很好。对我来说,我特别想避免创建 Graphics 对象。
  • 不,他想尽可能避免使用Graphics 实例。
  • 他已经使用了Graphics对象来构造FontMetrics。 (因此,他可以使用它)。他只是不想继续传下去。我一开始就不想碰图形。

标签: java swing fonts awt fontmetrics


【解决方案1】:

给定一个Font对象,有没有办法不经过Graphics2D.setFontGraphics2D.getFontMetric()就可以构造一个FontMetrics对象?

请参阅BufferedImage.createGraphics()getGraphics(),了解获取Graphics 实例的替代方法。

【讨论】:

  • 您好 Andrew,我注意到您编辑了从 Java 6 到 Java 7 的链接。实际上,出于愚蠢的原因,我一直坚持使用 Java 6。我是否应该以不同的方式标记我的问题以指定我必须使用 Java 6?
  • Java 7 中的相同文档适用于 Java 6,除非他们声明 @since 1.7 我觉得无论您的目标是什么版本,最好链接到最新的 Java 文档。有时提及最低版本很方便,但 Java 7 仍然足够新,以至于大多数人会认为添加 “如果用户可以运行 Java 7,您就可以使用..”。 ,我仍然为 Java 6 或更低版本编写代码。在我考虑添加任何 1.7+ 功能之前还需要一段时间。
【解决方案2】:

或者完全不使用图形对象:

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

如果您现在调用 c.getGraphics(),它将返回 null。这个(画布)也适用于headless mode

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 2011-02-20
    • 1970-01-01
    • 2013-10-21
    • 2013-07-19
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多