无法将物理字体应用于Windows下运行的Java小程序中的AWT按钮

时间:2013-08-08 18:04:27

标签: java windows fonts

我正在使用“物理字体”编写applet,我将其嵌入jar文件中,如下所示:

javac Test.java
jar -cf Test.jar Test.class *.ttf

编译没有错误,字体与源位于同一目录中,并成功嵌入到生成的jar中。

字体是LiberationSerif-Regular.ttf

这是一个近乎最小的示例Test.java的代码

import java.applet.*;
import java.awt.*;
import java.io.*;

public class Test extends Applet {
    Font font;

    public Test() {
        try {
            InputStream f;
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            ClassLoader classLoader = getClass().getClassLoader();
            f=classLoader.getResourceAsStream("LiberationSerif-Regular.ttf");
            font=Font.createFont(Font.TRUETYPE_FONT,f).deriveFont(15.0f);
            System.out.println(ge.registerFont(font));
            System.out.println("ok");
        }
        catch(Exception e) {
            System.out.println("oops");
            System.out.println(e.getMessage());
        }
    }

    public void init() {
        setLayout(new FlowLayout());
        Button b=new Button("Am I serifed ?");
        add(b);
        b.setFont(font);
    }
}

以下是Go.html文件

<HTML>
<HEAD></HEAD>
<BODY>
<APPLET CODE = "Test.class" ARCHIVE="Test.jar" WIDTH = 400 HEIGHT=200>
</APPLET>
</BODY>
</HTML>

我将Go.html和Test.jar复制到一个新目录,我cd到那个目录,然后我运行

appletViewer Go.html

它在控制台中输出:

true
ok

但是小程序中的按钮具有默认字体而不是我发送的字体(但它具有正确的大小13pt)。

使用java 1.7.0_25在Windows 7上测试

置换添加(b);和b.setFont(font);没有帮助。

我还测试了生成的代码,将其放在我的网站上,并使用Firefox从Mac和PC上浏览:它可以在Mac上运行,但不能在PC上运行! Firefox在两台机器上都有相同的Java插件版本:1.7.0_25。 mac和pc都没有在其操作系统中安装此字体。

如果我要求applet在paint(Graphics g)函数中绘制一个带有物理字体的字符串,它就可以了! (在三个测试中!)所以applet有字体。它甚至可以使用使用ge.registerFont(font)注册字体。

我尝试在applet中添加带逻辑字体的其他按钮:它可以工作。但逻辑字体,虽然它们具有系统独立的名称,但结果却依赖于系统的形状和大小,所以这不是我想要的。

我的猜测是我忘记了一些操作,但是哪个?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

使用Button类似乎是一个问题。我也无法使用Button类的任何字体。但是我确实让JButton类对字体采取了没问题。

JButton b=new JButton("Am I serifed ?");

我的猜测是,AWT并没有太多的字体支持,因为在花哨的UI领域有波动的人气。

如果您不了解swing .... swing和AWT是实现java界面的两种不同方式,它们的使用和访问方式相同,并且在很多情况下可以互换。例如:你可以在你的AWT Applet中使用你的swing JButton(Swing有一个JApplet)

这是一篇关于摇摆与AWT http://edn.embarcadero.com/article/26970

的优缺点的文章