【问题标题】:How to determine the length of a graphic string?如何确定图形字符串的长度?
【发布时间】:2011-09-08 02:46:14
【问题描述】:

我正在使用 Excel 文档创建图形时间线,并且我需要在该事件的标记旁边放置事件名称的小标签。其中一些很容易并且是右对齐的,但其他的是左对齐的,我需要弄清楚它们的宽度,以便我可以正确地偏移它们。

window.drawString("7/4-Fourth of July",horizontalIndex-Offset,verticalIndex);

目前我正在使用 10 和 32 字体大小的平均值来平均像素宽度,但这并没有真正削减它。有人可以帮我得到确切的偏移量吗?

【问题讨论】:

    标签: java swing graphics font-size


    【解决方案1】:

    这个帖子解释了如何做到这一点: Calculate the display width of a string in Java

    你应该先获取字体指标,然后询问指标某个字符串的宽度。

    【讨论】:

      【解决方案2】:

      从 java.awt.Graphics 对象,您可以调用 getFontMetrics。 FontMetrics 对象有一个 getStringBounds 方法,可以满足您的需要。

      这里是the documentation

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          作为(阅读:我的 ;-)一般规则,永远不要使用图形级 drawString 方法。相反,使用 JLabel/CellRendererPane 对将文本“标记”到任何组件上。

          优势

          • 自动处理抗锯齿
          • 尺寸计算是在标签的内部完成的,因此定位计算不需要任何低级方法,只需基于标签的 prefSize

          【讨论】:

          • kleopatra +1 :-) 欢迎回来,我希望这段时间是环游世界 :-),感谢您的投入,
          • @mKorbel 谢谢 :-) “世界”只是丹麦的一个小岛 :-)
          • 有关使用JLabel 进行渲染的示例,请参阅LabelRenderTest.java 源代码。
          【解决方案5】:

          TextLayout,显示为here,是另一种选择。

          【讨论】:

          • 从您的链接示例中,TextLayout 似乎能够准确计算所提供文本字符串的上升,而FontMetrics 似乎想要考虑变音符号和其他可能不存在的问题.
          • @Andrew Thompson:好点。 TextLayout 似乎给出了更严格的界限并适用于样式文本。这是面对面的comparison
          • 没有什么比“射击”更能帮助整理杂物了。 ;)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-18
          • 2021-04-20
          • 2012-09-14
          • 2011-05-06
          • 2012-07-06
          • 1970-01-01
          • 2011-05-04
          相关资源
          最近更新 更多