如何从Java获取字体名称列表

时间:2015-02-28 21:30:22

标签: java fonts awt

在Java中,我们可以创建一个Font对象:

new Font("Helvetica", Font.PLAIN, 12);

我的问题是如何从Java中获取整个字体名称列表,例如" Helvetica"我们可以将它用作Font构造函数的参数吗?

我尝试了以下方法,但我无法找到" Helvetica"在所有列表中。

    GraphicsEnvironment ge;  
    ge = GraphicsEnvironment.getLocalGraphicsEnvironment();  

    String[] names = ge.getAvailableFontFamilyNames();
    Font[] allFonts = ge.getAllFonts();

    for(int x=0; x<names.length; x++)
        System.out.println(names[x]);

    for(int x=0; x<allFonts.length; x++){           
        System.out.println(allFonts[x].getName());
        System.out.println(allFonts[x].getFontName());
        System.out.println(allFonts[x].getFamily());
        System.out.println(allFonts[x].getPSName());
    }

编辑:更重要的是,我还想知道Font构造函数new Font("What attribute is this?", Font.PLAIN, 12)中的第一个属性调用是什么

问:它是fontName,family,fontFace,name还是什么?

4 个答案:

答案 0 :(得分:3)

在您的系统上,该字体可能会映射到其他内容

Font helvetica = new Font("Helvetica", Font.PLAIN, 12);
System.out.println(helvetica.getFontName(Locale.US));

我得到了

SansSerif.plain

要输出所有本地字体的名称,您可以使用类似

的内容
GraphicsEnvironment ge = GraphicsEnvironment
        .getLocalGraphicsEnvironment();

Font[] allFonts = ge.getAllFonts();

for (Font font : allFonts) {
    System.out.println(font.getFontName(Locale.US));
}

答案 1 :(得分:2)

此程序将显示您系统中所有字体的列表:

import java.awt.GraphicsEnvironment;

public class ListJavaFonts
{

  public static void main(String[] args)
  {
    String fonts[] = 
      GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

    for ( int i = 0; i < fonts.length; i++ )
    {
      System.out.println(fonts[i]);
    }
  }

}

答案 2 :(得分:1)

new Font("Helvetica", Font.PLAIN, 12);

在这种情况下,最好使用以下内容:

new Font(Font.SANS_SERIF, Font.PLAIN, 12);

这将产生该操作系统默认使用的未修饰Font

在Windows上,它将是Arial。在OS X上它将是Helvetica。在* nix机器上它可能是,或者是第三个未修饰的Font


在回答您的具体问题时,我总是发现'font family'字符串对于创建字体实例很有用。

答案 3 :(得分:0)

我知道这是一个老问题,但有一些悬而未决的问题。

  

更重要的是,我还想知道Font构造函数new Font中的第一个属性调用是什么(“这是什么属性?”,Font.PLAIN,12)问:它是fontName,family,fontFace,name还是什么?

如果使用IDE(我正在使用IntelliJ)反编译Java类,您将看到:

public Font(String name, int style, int size) {
    this.name = (name != null) ? name : "Default";
    this.style = (style & ~0x03) == 0 ? style : 0;
    this.size = size;
    this.pointSize = size;
}
public String getName() {
        return name;
    }
public String getFontName() {
  return getFontName(Locale.getDefault());
}

这告诉您可以使用getName检索调用构造函数时使用的名称,但是对getFontName的调用将返回默认文本。这就是为什么你可以将名称设置为Helvetica,然后调用getFontName并返回除Helvetica之外的其他内容。