如何在Java SWING中设置自定义字体的大小和其他属性(粗体、斜体等)

6
通常,当我在我的SWING应用程序中初始化想要使用的字体时,我会这样做:
public static final Font TITLEFONT = new Font("Calibri", Font.BOLD, 40);

现在,我必须采取一些不同的方式,因为我使用了一些来自 .ttf 文件的自定义字体。我通过以下方式初始化字体:

try
{
    InputStream is = OptionsValues.class.getResourceAsStream("fonts//KOMIKAX_.ttf");
    TITLEFONT = Font.createFont(Font.TRUETYPE_FONT, is);
}
catch (Exception ex)
{
    ex.printStackTrace();
    System.err.println("Font not loaded.  Using Calibri font.");
    TITLEFONT = new Font("Calibri", Font.BOLD, 40);
}

我很确定它正确地初始化了(我无法确定,因为它对我来说太小了),但我想知道如何在以这种方式加载字体时手动设置字体的大小(以及是否为粗体/其他属性)。

非常感谢!

2个回答

10

createFont返回一个字体(Font)对象,你可以在此对象上调用deriveFont(...)方法,传入一个float类型的点大小或者Font风格和点大小的int和float类型参数。我无法确定它是否适用于你的特定情况,但值得一试。

例如:

InputStream is = OptionsValues.class.getResourceAsStream("fonts//KOMIKAX_.ttf");
TITLEFONT = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont(Font.BOLD, 40f);

1
它完美无瑕地工作!在我的JLabel中似乎有点像素化,但我认为这就是字体的制作方式。再次感谢您的帮助! - Jumbala
1
根据上下文,RendereringHints 可能会有所帮助。 - trashgod
@trashgod 我尝试在JLabel创建时添加匿名内部类来覆盖paintComponents并使用Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 然而似乎没有任何改变,你有什么想法吗? - Jumbala
1
@Adam:可能是错误的抗锯齿设置。你尝试过KEY_TEXT_ANTIALIASING和VALUE_TEXT_ANTIALIAS_ON吗? - Hovercraft Full Of Eels
@Hovercraft 我刚试了一下,也不行...我会继续尝试其他方法来让它看起来更好,如果我找到了让文本更流畅的方法,我会回来的。 - Jumbala
显示剩余2条评论

1
我会简单地使用以下代码:

Font.ITALIC

Font.BOLD

Font.PLAIN


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接