Java字体系列名称不一致

时间:2011-03-02 19:46:11

标签: java fonts

在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);
}

1 个答案:

答案 0 :(得分:1)

(我想知道我可以用什么徽章来回答我自己的风滚草问题。)

我发现Font.decode(s + " plain")为我提供了具有正确姓氏的字体。