gpt4 book ai didi

java - 尊重 Java/Swing 中的字体连字

转载 作者:行者123 更新时间:2023-11-30 06:09:12 28 4
gpt4 key购买 nike

在处理 java 中的 Swing 对象(还有 JFX,但我稍后会担心这个问题)时,我遇到了一个让我摸不着头脑的问题。

这是我用来在程序中打开字体的代码。这是相当标准的。

public static Font getFontFromFile(String filePath) throws FontFormatException, IOException {
File fontFile = new File(filePath);
return Font.createFont(Font.TRUETYPE_FONT, fontFile);
}

我的问题是,当我实际使用这些字体时,其中的连字不受尊重。我的程序的核心功能之一允许用户加载自定义字体,其中许多字体具有专门的连字。这些没有得到尊重,我不确定我做错了什么。如果用户键入两个应减少为单个连字的字符,则第二个字符将正常显示,不会发生任何转换。当我将字体加载到任何其他程序或文本编辑器中时,我发现连字完全符合我的预期。

我已经精简了代码,实际上我在几个地方将字体设置为绝对的骨架,即使在我正在做一些简单的事情的地方,我也看到了(错误的)行为:

jTextField.setFont(myFont);

我是否缺少一些导入设置?或者需要在 2D 图形对象上进行全局翻转?任何帮助将不胜感激。谢谢,

最佳答案

找到了。

好的。所以。这令人沮丧,因为我已经正确设置了 TextAttributes,同时通过一种长期存在的错误困扰的方法加载字体......连字应该在 JTextField< 中表示JTextArea 对象,但在某些情况下,它们不会是。有两件事需要记住。

  1. 存在一个旧错误 ( https://bugs.openjdk.java.net/browse/JDK-8139741 ),它会阻止使用该模式时遵守连字
// BROKEN PATTERN
Font myFont = new Font(<FONT_FAMILY_NAME>, Font.PLAIN, 72);

相反,只有从二进制位置加载字体连字才会受到尊重:

// WORKING PATTERN
File myFontFile = new File(<FILE_LOCATION>);
Font fixed = Font.createFont(Font.TRUETYPE_FONT, myFontFile);
  • 从二进制加载字体后,必须通过 TextAttributes 设置连字,如下所示:
  • Map attributes = fixed.getAttributes();
    attributes.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON);
    fixed = fixed.deriveFont(attributes);

    当直接从操作系统加载字体时,我开始在系统上查找实际的字体文件并将其作为二进制文件加载。虽然很麻烦,但是很实用。

    关于java - 尊重 Java/Swing 中的字体连字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50631657/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com