0

我正在使用“物理字体”编写一个小程序,我将其嵌入到 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 上测试

置换 add(b); 和 b.setFont(字体); 没有帮助。

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

如果我要求小程序在paint(Graphics g) 函数中使用物理字体绘制一个字符串,它就可以工作!(在三个测试中!)所以小程序有字体。它甚至可以在不使用 ge.registerFont(font) 注册字体的情况下工作。

我试图在小程序中添加其他带有逻辑字体的按钮:它有效。但是逻辑字体,虽然它们有与系统无关的名称,但最终却具有与系统相关的形状和大小,所以这不是我想要的。

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

任何帮助表示赞赏。

4

1 回答 1

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

于 2013-08-08T19:24:51.653 回答