java - 在 java 中获取字符串大小(没有可用的 Graphics 对象)

标签 java string bounds graphics2d

我正在尝试使用 Java 中的 Graphics2D 类编写需要绘制许多字符串的应用程序。我需要获取每个 String 对象的大小(以计算每个字符串的确切位置)。 字符串太多,应该在调用 paint() 方法之前完成,并且只在我的程序开始时完成一次(这样我就没有 Graphics2D对象)。我知道有一个方法 Font.getStringBounds() 但它需要一个 FontRenderContext 对象作为参数。

当我尝试创建自己的对象时:

FontRenderContext frc = new FontRenderContext(MyFont.getTransform(), true, true)

然后获取字符串边界 我得到的大小总是与使用 paint()< 中的 Graphics2D.getFontRenderContext() 方法获取 FontRenderContext 时不同。差异不大(大约 1E-3),但我想知道为什么会有任何差异?

但是,有没有更好更安全的方法来获取字符串的大小?

提前感谢您的帮助!

最佳答案

尝试使用 FontMetrics类(class); stringWidth方法返回字符串的大小。 一个例子:

JComponent c = getSomeKindOfJComponent();
FontMetrics fm = c.getFontMetrics(c.getFont()); // or another font
int strw = fm.stringWidth("My text");

关于java - 在 java 中获取字符串大小(没有可用的 Graphics 对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4914145/

相关文章:

iphone - 如何从我的 View Controller 为多个 subview 设置 CAlayer 边界

java - 为什么这个算法使用Java中的按位与运算符?

c# - ExpectedException.NoExceptionMessage 中的字符串出现在哪里?

java - AtomicBoolean 中 getAndSet 和 compareAndSet 的区别

c - 接收字符串消息时出现段错误

java - 从 JTable 空字符串错误读取信息时出错

unity-game-engine - 检测编辑器内的碰撞

java - 在 Java 中,为什么数组不能是类型变量的边界,但可以是通配符的边界?

java - 如何在下拉列表中加载未使用ID的值...隐藏其值已使用的所有记录?

java - 如何匹配括号来解析 S 表达式?