用java 怎么计算 数字 空格 汉字 字母的宽度啊?

来源:百度知道 编辑:UC知道 时间:2024/05/05 05:30:17
需求是这样的:有10-20 个混合的字符串,我需要把他们加上下划线然后导出到word里,就像在横线上填写了一些东西一样,问题是我怎么才能做到无论字符串有多长,无论是否是汉字或者是字母,都保持那个横线是一个固定的长度啊?
我写了个方法把那些字符串都转换为20个字符,不足的在两边补空格,但是混合型字符串就不能满足要求了。
有谁知道方法吗?
我的字号都是固定的

Font(String name, int style, int size)
根据指定名称、样式和点大小,创建一个新 Font。
name - 字体名称。可以是字体外观名称或字体系列名称,并可表示此 GraphicsEnvironment 中找到的逻辑字体或物理字体。逻辑字体的系列名称有:Dialog、DialogInput、Monospaced、Serif 或 SansSerif。如果 name 为 null,则将新 Font 的 逻辑字体名称(由 getName() 返回)设置为 "Default"。
style - Font 的样式常量。样式参数是整数位掩码,可以为 PLAIN,或 BOLD 和 ITALIC 的按位或(例如,ITALIC 或 BOLD|ITALIC)。如果样式参数不符合任何一个期望的整数位掩码,则将样式设置为 PLAIN。
size - Font 的点大小

private static final Font TEXT_FONT = new Font("MS Sans Serif", java.awt.Font.PLAIN, 12);
FontMetrics fm = Toolkit.getDefaultToolkit().getFontMetrics(TEXT_FONT);
fm.stringWidth(str);
FontMetrics 的方法:
public int stringWidth(String str)返回此 Font 中指定 String 的总 advance width。advance 是字符串的 baseline 上最左边的点到最右边的点之间的距离。
注意,由此方法所返回的总 advance width 没有考虑呈现的上下文。因此,anti-aliasing 和 fractional 的规格提示可能影响 advance 的值。如果启用 anti-aliasing 和 fractional 规格提示,请使用 getStringBounds(String, Graphics) 代替此方法。