在JDK6下的WinXP框中,输入以下代码:
import java.awt.Font;
import java.awt.GraphicsEnvironment;
public class TestFontFamily
{
public static void main(String[] args)
{
for( String s : GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames() )
{
Font f = Font.decode(s);
if( f != null && !s.equals(f.getFamily()) )
System.out.println(String.format("%-20s %s", s, f));
}
}
}
打印以下列表:
Bauhaus 93 java.awt.Font[family=Dialog,name=Bauhaus,style=plain,size=93]
Bookshelf Symbol 7 java.awt.Font[family=Dialog,name=Bookshelf Symbol,style=plain,size=7]
Britannic Bold java.awt.Font[family=Dialog,name=Britannic,style=bold,size=12]
Harlow Solid Italic java.awt.Font[family=Dialog,name=Harlow Solid,style=italic,size=12]
Modern No. 20 java.awt.Font[family=Dialog,name=Modern No.,style=plain,size=20]
Wingdings 2 java.awt.Font[family=Wingdings,name=Wingdings,style=plain,size=2]
Wingdings 3 java.awt.Font[family=Wingdings,name=Wingdings,style=plain,size=3]
所以问题是为什么来自Font#decode
的字体系列名称不同?我应该使用哪一个?
似乎两个都有问题:getAvailableFontFamilyNames()
包含样式/大小,而我从Font#decode
获得的内容可能包含错误的姓氏/姓名。
奖金问题是:获取字体列表的可靠方法是什么?
以下代码也不起作用,因为某些字体的“名称”与“姓氏”不同,例如“Berlin Sans FB Demi Bold”的姓氏是“Berlin Sans FB Demi” ”
for( Font f : GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts() )
{
if( f.getFamily().equals(f.getName()) )
System.out.println(f);
}
答案 0 :(得分:1)
(我想知道我可以用什么徽章来回答我自己的风滚草问题。)
我发现Font.decode(s + " plain")
为我提供了具有正确姓氏的字体。