我已经开始在 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);
}
}