在 Java 中测试字体是否为等宽字体
我正在尝试列出用户计算机上可用的所有等宽字体。 我可以通过以下方式获取 Swing 中的所有字体系列:
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
有没有办法找出其中哪些是等宽字体?
提前致谢。
I'm trying list all of the monospaced fonts available on a user's machine. I can get all of the font families in Swing via:
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
Is there a way to figure out which of these are monospaced?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
一种更简单的方法,不需要制作 BufferedImage 来获取 Graphics 对象等:
A simpler method that doesn't require making a BufferedImage to get a Graphics object etc.:
您可以使用 getWidths () FontMetrics 类。 根据 JavaDoc:您可以使用 FontMetrics 类。 例如:
You could use the getWidths() method of the FontMetrics class. According to the JavaDoc:You could use the
charWidth(char)
method of the FontMetrics class. For example:比较几个字符的绘制长度(m、i、1、. 应该是一个很好的集合)。
对于等宽字体,它们都是相等的,对于可变宽度字体,它们则不然。
Compare the drawn lengths of several characters (m, i, 1, . should be a good set).
For monospaced fonts they will all be equal, for variable width fonts they won't.
根据 此回复,Java 并不知道太多关于底层字体细节,因此您必须对字体尺寸进行一些比较。
According to this response, Java doesn't know too much about underlying font details, so you'd have to do some comparisons of the font's dimensions.
可能不适用于您的情况,但如果您只是想将字体设置为等宽字体,请使用逻辑字体名称:
这将是您系统上有保证的等宽字体。
Probably not applicable for your case, but if you simply want to set the font to a monospaced font, use the logical font name:
This will be a guaranteed monospaced font on your system.