为什么java在要求简单的等宽字体时会使用斜字体?

时间:2013-07-09 15:06:31

标签: java fonts embedded-linux

我在我的应用程序中创建了一个等宽字体:

Font f = new Font(Font.MONOSPACED, Font.PLAIN, 18);

当我在PC上运行应用程序时,字体看起来很好(Ubuntu 12.04 LTS, Java SE Runtime Environment - build 1.7.0_25-b15)。

当我在ARM计算机上运行该应用程序时,该字体向右倾斜(Debian Squeeze, armel, Java SE Embedded Runtime Environment - build 1.7.0_10-b18)。

我测试了这个小程序:

public class Main {
    public static void main(String[] args) {
        setTerminalFont(new Font(Font.MONOSPACED, Font.PLAIN, 18));
        setTerminalFont(new Font("DejaVu Sans Mono", Font.PLAIN, 18));
    }
    private static void setTerminalFont(Font x_font) {
        System.out.println("Font family=["+x_font.getFamily()+"] name=["+x_font.getFontName()+"] i-angle="+x_font.getItalicAngle());        
    }
}

在PC计算机上打印:

Font family=[Monospaced] name=[Monospaced.plain] i-angle=0.0
Font family=[DejaVu Sans Mono] name=[DejaVu Sans Mono] i-angle=0.0

在ARM计算机上,它会打印:

Font family=[Monospaced] name=[Monospaced.plain] i-angle=0.1899996
Font family=[DejaVu Sans Mono] name=[DejaVu Sans Mono Oblique] i-angle=0.1899996

有人可以解释为什么ARM版本使用 DejaVu Sans Mono 倾斜

如何让java使用普通的 DejaVu Sans Mono 字体而不是倾斜的字体?

1 个答案:

答案 0 :(得分:0)

由于 plain Font.MONOSPACED逻辑字体在我的系统上存在错误,我的解决方案是列出我系统上可用的所有字体:

System.out.println("Listing available fonts");
for (Font f : GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts())
   System.out.println("- "+f);

尝试单声道和打字机 - 那些声称是普通常规或任何不倾斜的东西,直到我找到一个真正

我最终得到Lucida Sans Typewriter Regular