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



我正在使用"物理字体"编写一个小程序,我将其嵌入到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(字体);没有帮助。

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

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

我试着在小程序中添加其他具有逻辑字体的按钮:它很有效。但是逻辑字体,尽管它们有独立于系统的名称,但它们的形状和大小与系统有关,所以这不是我想要的。

我的猜测是我忘记了一些手术,但是哪一个?

感谢您的帮助。

使用Button类似乎有问题。我也无法使用Button类的任何字体。然而,我确实让JButton类对字体进行了处理,没有问题。

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

我的猜测是AWT没有太多的字体支持,因为它在花哨的UI领域很受欢迎。

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

这是一篇文章,涵盖摇摆与AWT的利弊http://edn.embarcadero.com/article/26970

最新更新