如何确定图形字符串的长度?
Posted
技术标签:
【中文标题】如何确定图形字符串的长度?【英文标题】: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 字体大小的平均值来平均像素宽度,但这并没有真正削减它。有人可以帮我得到确切的偏移量吗?
【问题讨论】:
【参考方案1】:这个帖子解释了如何做到这一点: Calculate the display width of a string in Java
你应该先获取字体指标,然后询问指标某个字符串的宽度。
【讨论】:
【参考方案2】:从 java.awt.Graphics 对象,您可以调用 getFontMetrics。 FontMetrics 对象有一个 getStringBounds 方法,可以满足您的需要。
这里是the documentation
【讨论】:
【参考方案3】:另一个不错的选择是SwingUtilities#computeStringWidth(FontMetrics fm, String str)
【讨论】:
【参考方案4】:作为(阅读:我的 ;-)一般规则,永远不要使用图形级 drawString 方法。相反,使用 JLabel/CellRendererPane 对将文本“标记”到任何组件上。
优势
自动处理抗锯齿 尺寸计算是在标签的内部完成的,因此定位计算不需要任何低级方法,只需基于标签的 prefSize【讨论】:
kleopatra +1 :-) 欢迎回来,我希望这段时间是环游世界 :-),感谢您的投入, @mKorbel 谢谢 :-) “世界”只是丹麦的一个小岛 :-) 有关使用JLabel
进行渲染的示例,请参阅LabelRenderTest.java 源代码。【参考方案5】:
TextLayout
,显示为here,是另一种选择。
【讨论】:
从您的链接示例中,TextLayout
似乎能够准确计算所提供文本字符串的上升,而FontMetrics
似乎想要考虑变音符号和其他可能不存在的问题.
@Andrew Thompson:好点。 TextLayout
似乎给出了更严格的界限并适用于样式文本。这是面对面的comparison。
没有什么比“射击”更能帮助整理杂物了。 ;)以上是关于如何确定图形字符串的长度?的主要内容,如果未能解决你的问题,请参考以下文章