我有一个JButton,我想给它添加一个图标。我想使用FontAwesome提供的基于字体的图标,该字体提供了一个TrueType字体文件。我正在尝试添加的图标是播放按钮图标,该图标在FontAwesome的css文件中为\f04b
,我相信在Java中将其转换为\uf04b
。
这是我在IconButton基类的构造函数中加载字体的方式。
public class IconButton extends JButton {
public IconButton() {
try {
InputStream in = this.getClass().getResourceAsStream("/fontawesome-webfont.ttf");
Font ttfBase = Font.createFont(Font.TRUETYPE_FONT, in);
Font ttfReal = ttfBase.deriveFont(Font.BOLD, 24);
setFont(ttfReal);
} catch (FontFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在实现类 StartButton 中,这是我设置文本的方法。
public class StartButton extends IconButton {
public StartButton() {
setText(String.valueOf('\u0f4b'));
setForeground(Color.BLACK);
}
}
这是我得到的。什么也没有。
非常感谢任何帮助。
编辑:请查看下面的答案。
createFont
抛出的异常既未被捕获也未声明),而且这两个类的设计看起来很糟糕(1. 第一个类可以创建字体并将其缓存为静态属性;2. 如果它基于字符串定义了一个构造函数来调用超级构造函数,就可以完全避免第二个类)。或者,A. 由于IconButton
设置了一个字体,而StartButton
设置了前景色,因此使用标准的JButton
并将每个按钮交给一个方法来配置外观。B. 使用新的 PLAF 或调整UIManager
。 - Andrew Thompson