在Swing中选择等宽字体的正确方法

时间:2009-04-06 15:45:37

标签: java swing fonts

我正在搞乱DefaultStyledDocument,并试图找出将样式设置为正确的等宽字体的正确方法。 “正确”是指所选字体为:

  1. 用户计算机上存在的等宽字体
  2. 用户首选项指定的字体(在Java中有标准方法吗?)
  3. 如果没有指定的字体,它将回退到标准的等宽字体(“Monospaced”)。
  4. 这有效:

    StyleConstants.setFontFamily(mainStyle, "Monospaced");
    

    这也有效:

    StyleConstants.setFontFamily(mainStyle, "Lucida Console");
    

    但我似乎无法弄清楚如何判断有问题的字体是否存在于用户的机器上(setFontFamily没有返回值)并且是等宽字体。如果我使用“Lucida Consoleq”,它似乎使用默认字体。

3 个答案:

答案 0 :(得分:3)

请参阅java.awt.Font public static Font decode(String str)。您似乎可以使用{{1}}方法来完成您想要的任务。这个方法的javadoc的最后一段说:

  

默认大小为12,默认值为   风格是普拉。如果str没有   指定有效大小,返回   字体的大小为12.如果str没有   指定一个有效的样式,返回   Font的风格为PLAIN。如果你这样做   没有在。中指定有效的字体名称   str参数,这个方法会返回   姓氏为“Dialog”的字体。   确定哪些字体系列名称   在您的系统上可用,使用   GraphicsEnvironment.getAvailableFontFamilyNames()   方法。如果str为null,则为新的Font   以姓氏返回   “对话框”,大小为12和PLAIN   风格。

如果您要查找的字体系列不存在,则会返回“Dialog”。只要您没有将其作为返回值,就会存在字体系列。

答案 1 :(得分:3)

Monospaced是一个虚拟名称(如Dialog),Java将映射到系统的默认固定宽度字体。

答案 2 :(得分:2)

我想你想要这个

GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

请参阅javadoc