Java Swing JLabel、HTML 和自定义字体

Posted

技术标签:

【中文标题】Java Swing JLabel、HTML 和自定义字体【英文标题】:Java Swing JLabel, HTML and custom fonts 【发布时间】:2012-01-15 10:02:24 【问题描述】:

在我们的 Java Swing 应用程序中,我们正在加载自定义字体并将其添加到 JLabel

try 
  this.font = Font.createFont(Font.TRUETYPE_FONT, new File("resources/fonts/ourcoolfont.ttf")).deriveFont(16f);
 catch (Exception e) 
  this.font = new Font("Arial", Font.PLAIN, 16);

this.label.setFont(this.font);

在 3 个不同的系统上简单且运行良好。直到其他人试图运行它。字体已加载(因为我们也在其他一些 Swing 元素上使用),但未在 JLabel 中使用。

经过一番搜索,我发现您不能同时使用 html 和加载的字体。由于某些原因,它适用于我的系统(我认为它与 Java 版本有关),但不适用于其他系统。由于我们希望项目能够在过时的 Java 版本中运行,因此不能只要求更新。

一种选择是在计算机上安装字体,这是我们不喜欢做的事情。我找到的最好的解决方案是这个: How can I create a Java/Swing text component that is both styled and has a custom font?

不过,这个问题是关于JTextPaneJLabel 似乎没有我可以使用的 getStyledDocument() 方法。

有什么方法可以让我们的字体与JLabel一起工作?

【问题讨论】:

【参考方案1】:

使用一些字体:

<html><head><style type="text/css">
body  font-family: Cool;  </style></head><body>...

您创建的字体必须首先在单例 GraphicsEnvironment 中注册才能供所有人访问:

GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
genv.registerFont(font);

【讨论】:

谢谢!只需注册似乎就足以解决问题:)【参考方案2】:

因为StyledDocument 扩展了Document,您可以使用JTextFieldsetDocument() 方法实现。

【讨论】:

以上是关于Java Swing JLabel、HTML 和自定义字体的主要内容,如果未能解决你的问题,请参考以下文章

JAVA学习Swing章节标签JLabel中图标的使用

防止带有 html 的 JLabel 换行

200分 Java Swing 刷新问题

java 的Swing

如何让 Swing 将我自己的 HTMLEditorKit 用于 JLabel/JButton/等

将 JLabel 数组导入 JComponent