我正在使用“物理字体”编写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中添加带逻辑字体的其他按钮:它可以工作。但逻辑字体,虽然它们具有系统独立的名称,但结果却依赖于系统的形状和大小,所以这不是我想要的。
我的猜测是我忘记了一些操作,但是哪个?
任何帮助表示感谢。
答案 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
的优缺点的文章