JavaFX 字体渲染中的错误字符间距(字距调整)(在 Linux 中)

2024-04-04

我已经开始在 JavaFX 中开发一个应用程序,并且遇到了一个问题,我可以找到很少的有用信息: Linux 中字符之间的间距非常不均匀。我不是在谈论不同字符的宽度,而是在谈论字符之间的空格。

它在普通文本中可见,但以下示例比普通文本更好地说明了效果。看一下第一行。前两个字符之间的间距小于第二个和第三个字符之间的间距。这也发生在第六个和第七个角色以及其他几个角色之间:

Swing 没有这个问题,JavaFX 在 Windows 中也没有这个问题,或者在该操作系统上几乎不可见。这在 Mac 上似乎也不是一个主要问题。为了进行比较,以下是 2014 年中期 Mac Retina MacBook Pro 上运行 OS X 10.12.6 和 Java 9.0.4 的示例输出:

有谁知道这是否是 JavaFX 字体渲染引擎中的一个错误?如果是这样,有解决方法吗?

我真的开始怀疑我是否应该更改框架,因为在我看来,如此糟糕的字体渲染是不可接受的。

关于这个问题还有另一个问题,但尚未得到解答:为什么 JavaFX 在使用文本组件时在字母之间添加额外的间距以及如何修复它? https://stackoverflow.com/questions/24727748/why-does-javafx-add-extra-spacing-between-letters-when-using-the-text-component

我已经能够在运行 Manjaro 的两台不同的 Linux 机器和运行 Debian 的虚拟机上重现此问题,代码如下:

package de.localtoast.fonttest;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FontTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox();
        Label label1 = new Label("0000000000000000000000");
        Label label2 = new Label("OOOOOOOOOOOOOOOOOOOOOO");
        Label label3 = new Label("oooooooooooooooooooooo");

        root.getChildren().add(label1);
        root.getChildren().add(label2);
        root.getChildren().add(label3);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Font Test");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Jewelsea 建议我将问题提出openjfx-dex 邮件发送 http://mail.openjdk.java.net/mailman/listinfo/openjfx-dev list. 那边的人可以解释一下发生了什么 http://mail.openjdk.java.net/pipermail/openjfx-dev/2018-March/021539.html:

It is notJavaFX 的问题,但我的 Linux 系统上的配置问题。 JavaFX 需要子像素渲染来正确定位字形。我使用的是 Manjaro,它是 Archlinux 的衍生版本。在Archlinux中,子像素渲染是默认禁用 https://wiki.archlinux.org/index.php/font_configuration#Subpixel_rendering,这与微软涵盖的专利有关。

就我而言,问题可以通过安装 AUR 的 freetype2-ultimate5 包来解决,尽管 wiki 中提到的 freetype2-cleartype 包可能是更好的选择。但由于另一个问题,后一个目前无法在我的系统上编译。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 字体渲染中的错误字符间距(字距调整)(在 Linux 中) 的相关文章

  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • java.lang.ClassNotFoundException:javax.mail.MessagingException

    我想使用 eclipse 将电子邮件从我的 gmail 帐户发送到另一个邮件帐户 我使用 apache tomcat 7 0 34 作为我的 Web 服务器 并使用端口 8080 作为 apache 服务器 HTTP 1 1 并使用 JRE
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • 如何在 Java 中向时间戳添加/减去时区偏移量?

    我正在使用 JDK 8 并且玩过ZonedDateTime and Timestamp很多 但我仍然无法解决我面临的问题 假设我得到了格式化的Timestamp在格林威治标准时间 UTC 我的服务器位于某处 假设它设置为Asia Calcu
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何在 Spring 中使 @PropertyResource 优先于任何其他 application.properties ?

    我正在尝试在类路径之外添加外部配置属性资源 它应该覆盖任何现有的属性 但以下方法不起作用 SpringBootApplication PropertySource d app properties public class MyClass
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • Java Applet 中的 Apache FOP - 未找到数据的 ImagePreloader

    我正在研究成熟商业产品中的一个问题 简而言之 我们使用 Apache POI 库的一部分来读取 Word DOC 或 DOCX 文件 并将其转换为 XSL FO 以便我们可以进行标记替换 然后 我们使用嵌入到 Java 程序中的 FOP 将
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • Java Swing - 如何禁用 JPanel?

    我有一些JComponents on a JPanel我想在按下 开始 按钮时禁用所有这些组件 目前 我通过以下方式显式禁用所有组件 component1 setEnabled false 但是有什么办法可以一次性禁用所有组件吗 我尝试禁用
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • MiniDFSCluster UnsatisfiedLinkError org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

    做时 new MiniDFSCluster Builder config build 我得到这个异常 java lang UnsatisfiedLinkError org apache hadoop io nativeio NativeIO
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 任何图像文件格式是否支持负浮点数?

    我正在使用 OpenGL 来实现一些屏幕空间过滤器 出于调试目的 我想保存一堆纹理 以便可以比较各个像素值 问题是这些 16 位浮点纹理具有负值 您知道有哪些支持负值的图像文件格式吗 我怎样才能导出它们 是的 有一些这样的格式 您需要的是使
  • 将中心像素值复制到块中的多数值

    我有一个大小为 9085x10852 的图像像素预测数组 我想在每个像素周围得到一个 10x10 的块 如果中心像素值与块中的多数像素值不同 则用多数值替换中心像素值 谁能帮我吗 我正在挖掘scikit image今天寻找其他东西 如果你深
  • 视觉检漏仪未发现泄漏 VS2013

    无论我如何尝试 我似乎都无法让 VLD 捕获任何内存泄漏 有什么想法吗 这里也是输出的片段 Visual Leak Detector Version 2 4RC2 installed The thread 0x5748 has exited
  • 使用百分比而不是像素会改变 html 5 画布的属性吗?

    我正在练习 javascript 我正在尝试制作一个游戏 我希望画布元素是全屏的 因此我对高度和宽度属性使用了百分比 但是当我这样做时 它的行为与通常不同 当我运行调试代码时 它应该生成一个 50px x 50px 的盒子 但图形看起来比正
  • 错误:仅在包含所有数值变量的数据框上定义,并在大型数据集上使用 ddply

    我正在尝试按月 年 调查 ID 和网格 ID 在一个非常大的数据集 22000 条记录 上计算多个参数 例如 Er Count Mn Count 的总和和平均值 我最初尝试使用此代码来获取总和 dlply Effort All c Er C
  • Restsharp 响应中缺少 Cookie

    我将 Restsharp 用于我正在开发的 WPF 客户端 看来我在 client CookieContainer 中没有收到 cookie 在我成功向我们的服务器进行身份验证后 它始终有 0 个项目 这很奇怪 因为使用 Postman 发
  • 防止热链接 1 个特定 URL,但允许所有其他 URL

    我知道 htaccess 方法可以防止除您自己的域之外的每个站点上的热链接 但如果可能的话 我需要更高级的东西 我想允许访问我的个人服务器和所有其他站点 但仍要指出一些选定的站点并禁止它们进行热链接 我几乎想允许所有并拒绝特定的 IP 或
  • 如何减小 iPhone 应用程序的 .wav 音频文件的大小?

    我有一些循环播放的音乐 wav 文件大小约为 8 兆 我加载这个并循环它 一切都工作正常 直到我添加了另一个 4 meg wav 文件 现在游戏崩溃了 删除附加音频文件修复了崩溃问题 那么如何减小这些 wav 文件的大小呢 我想过在完成 4
  • Google Books API - 未返回图书详细信息

    所以我开始使用Google Books API对于我正在构建的应用程序 我对结果相当满意 但有时我会注意到一种奇怪的行为 即使该书存在于数据库中 某些 ISBN 也不会返回任何书籍详细信息 例如 如果我给出 https www google
  • java android eclipse 未绑定类路径变量

    Eclipse 上的 Unbound Class Path 变量是什么意思 我收到错误 但不知道如何修复它 Eclipse 中 Unbound Classpath 变量的含义是什么 这是一条警告消息 内容是 类路径变量 http help
  • Android:我可以从第 3 方应用程序使用此意图吗?

    我正在使用意图通过 Twitter 客户端发布消息 当手机上没有 Twitter 应用程序时 我想将用户重定向到市场 但异常 ActivityNotFoundException 不起作用 每次 当我没有 Twitter 应用程序时 我都会收
  • 程序中出现奇怪的错误“Ora-01001无效光标”

    昨天我处理了生产过程中的一个奇怪的错误 语句执行失败 if v cursor isopen then close v cursor here was an error end if 经过一番研究后 我发现问题出在打开该游标的子程序中 我通过
  • React 显示 0,而不是使用短路 (&&) 条件组件显示任何内容

    我有以下简单的短路语句 应该显示一个组件或不显示任何内容 profileTypesLoading
  • 条件变量可能未初始化

    我正在编写一个程序 根据 CLI 标志将传入文件子集为一个或两个输出文件 至少它的工作原理如下 use std fs File io Write fn main Would be a CLI flag let write all true
  • 瑞典语字符和 UTF-8

    我在所有页面上都使用 UTF 8 但一些瑞典语字符 和 变得混乱 只是一个带有一些字母的方框 我的数据库设置为 utf8 general ci 但我什至没有连接 所以这并不重要 或者我应该使用另一个字符集 这不是瑞典语网站 都是英文的 但我
  • 如何在 Linux 中创建别名? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 假设我想为 srm 创建一个别名 安全删除 这样每次使用 srm 时 都会运行交互式 rm 命令 例如rm i 需要对必要的配置文件进行此
  • 如果标签有重音,NSXMLParser 不会获取所有标签

    我有一个对数据库进行不同更改的网络服务 当我使用带有 sql 标签的 Web 服务返回行时 如下所示
  • Push 替换数组中的旧值

    也许是因为我工作了一整天 我看不到问题所在 但在下面的代码中 警报仅显示最后添加的值 并且不会将值推送到数组中 window sortControl sortControlPanel div sortControl simpleSortCr
  • 为什么 DbSet.Add 工作这么慢?

    8 个月前曾在这里讨论过同样的话题 如何加快 DbSet Add 的速度 https stackoverflow com questions 4355474 how do i speed up dbset add 除了使用 SqlBulkC
  • JavaFX 字体渲染中的错误字符间距(字距调整)(在 Linux 中)

    我已经开始在 JavaFX 中开发一个应用程序 并且遇到了一个问题 我可以找到很少的有用信息 Linux 中字符之间的间距非常不均匀 我不是在谈论不同字符的宽度 而是在谈论字符之间的空格 它在普通文本中可见 但以下示例比普通文本更好地说明了