如何确定图形字符串的长度?

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。 没有什么比“射击”更能帮助整理杂物了。 ;)

以上是关于如何确定图形字符串的长度?的主要内容,如果未能解决你的问题,请参考以下文章

sql 如何使用SQL确定字符串的长度?

mysql - 如何确定存储可变字符串的字段的长度?

如何确定 DBus 消息中“结构数组”的长度?

如何将字符串长度转换为像素单位?

C语言中如何定义一个二维数组,数组长度由输入值确定?

如何格式化数字以获得最小的字符串长度