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?
不过,这个问题是关于JTextPane
。 JLabel
似乎没有我可以使用的 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
,您可以使用JTextField
的setDocument()
方法实现。
【讨论】:
以上是关于Java Swing JLabel、HTML 和自定义字体的主要内容,如果未能解决你的问题,请参考以下文章