我通过
String[] fontlist = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
获得系统可用的字体列表后 如何再从中挑出所有的等宽字体呢??
String[] fontlist = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
获得系统可用的字体列表后 如何再从中挑出所有的等宽字体呢??
参考这个吧.里面有详细的代码.
等宽字体目录等宽字体
等宽字体举例
编辑本段等宽字体等宽字体(monospaced font)是指字符宽度相同的电脑字体。与此相对,字符宽度不尽相同的电脑字体称为比例字体(proportional font)。
在传统西文印刷中,比例字体可以提高单词的可读性。但因早期的电脑显示器、打字机,由于技术的局限,无法进行字母宽度的比例调整,因此将每个字元都制作成一样的宽度,从而形成了等宽字体。在等宽字体中,字母i,j显得两侧馀白较多,而字母w,m等的笔画显得相当拥挤。
但是随着图形用户界面主流的更新和电脑技术的提高,处理比例字体的局限性得到了突破,因此现在排版上显得比较自然的比例字体的使用已经相当普及。
东亚语言中,方块字基本上都作为等宽字体处理,如各个地区的汉字、日语假名的全形字符、韩语谚文音节等字符都是等宽的。 但是一些中文、日文字体中,由于同时涵盖西文的半形文字字符,因此也含有比例字体,造成一个字体中两种类型混杂的局面。
Windows简体中文操作系统中,老版本的默认字体中易宋体全部是等宽字体(因此用中易宋体进行西文排版看起来很不自然),而Windows Vista的默认字体微软雅黑中,半角的西文部分是比例字体,全角字符是等宽字体。
由于等宽字体的特点,当今的平面设计上也有特意使用等宽字体所具有的文化特征进行创作的风格,其中最具有代表性的就是ASCII艺术。ASCII艺术所使用的字符都是等宽字体,如果改用比例字体,图片往往变形而无法表达创作者本意。在网页设计中,<tt> </tt>或<pre> </pre>HTML标记通常都是使用等宽字体。在LaTeX中也是使用等宽字体。
另外,代码也经常使用等宽字体。
编辑本段等宽字体举例以下仅为举例,根据作业系统环境的不同可能会有差异。
* Linux英文字体
o DejaVu Sans Mono
o Monospace
o Nimbus Mono L
o Luxi Mono
* Linux中文字体
o 文泉驿等宽正黑
o en:GNU Unifont
* Linux日文字体
o さざなみ (Sazanami)
o IPA字体
* Macintosh英文字体
o Courier
o Monaco
* Macintosh中文字体
o Hei
o Kai
o GB18030 Bitmap
* Macintosh日文字体
o Osaka-等幅
* Windows英文字体
o Courier New
o Terminal
* Windows中文字体
o 中易宋体
o 新宋体
* Windows日语字体
o MSゴシック
o MS明朝(MS Mincho)
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.util.Vector;public class FontTest { public static void main(String[] args) { GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
Vector fontListMonospaced = new java.util.Vector();
Font[] fonts = ge.getAllFonts();
Object key;
Object value;
for (int i = 0; i < fonts.length; i++) {
java.util.Map attributes = fonts[i].getAttributes();
System.out.println(attributes.toString());
if (attributes.containsValue("Monospaced")) {
fontListMonospaced.addElement(fonts[i].getFontName());
} for (java.util.Iterator it = attributes.entrySet().iterator(); it
.hasNext();) {
java.util.Map.Entry entry = (java.util.Map.Entry) it.next();
key = entry.getKey();
value = entry.getValue();
System.out.println(key + "=" + value);
if (key instanceof String) {
if (((String) key).equals("family")) {
if (((String) value).equals("Monospaced")) {
fontListMonospaced.addElement(fonts[i]
.getFontName());
}
}
}
}
} }}运行代码?你就知道是怎么回事了.
不是说一个名叫 monospaced的字体.
是一个字体的属性值标识为 monospaced 的就是等宽字体.
有的时候这个属性存在的话.也是等宽.
我电脑所有字体中 只有一个字体属性的值包含Monospaced
字体 Monospaced
属性 key = family value = Monospaced
虽然麻烦了点 结果是对的 Graphics g = image.getGraphics();
FontMetrics fm = g.getFontMetrics(font);
if (fm.charWidth('l') != fm.charWidth('m')){
//TODO
}