【问题标题】:Java font family name discrepancyJava字体系列名称差异
【发布时间】:2011-07-07 13:13:33
【问题描述】:

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

【问题讨论】:

    标签: java fonts


    【解决方案1】:

    (我想知道回答我自己的风滚草问题会得到什么徽章。)

    我发现Font.decode(s + " plain") 给了我带有正确姓氏的字体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2016-01-01
      • 2013-09-20
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多