我无法让 JavaFX GraphicsContext strokeText() 正确显示等宽字体

I cannot get JavaFX GraphicsContext strokeText() to display monospaced fonts right

问题: 我希望 GraphicContext 对象以等宽字体描边文本。如何实现?

问题:我正在使用 JavaFX。我有一个 Canvas 对象和一个 GrahpicsContext 对象。我想使用 GraphicsContext 的 strokeText() 方法在 canvas 上绘制文本。在调用 strokeText() 之前,我使用 GraphicsContext 对象的 setFont() 将字体设置为等宽字体。重要的是,我要在 canvas 上绘制的字符串中的所有字符都具有相同的宽度。 我已经尝试使用 Courier、Courier New 和 Monospace 字体在 canvas 上绘制文本。我知道这些字体应该是等宽的。我导入了 javafx.scene.text.Font.

但是,当我检查 canvas 上绘制的文本时,我每次都会看到: Screenshot of the left corner of my canvas object.

为了测试字体,我让 GraphicsContext 对象在各自的行上绘制了 5 次字符“_”、'a'、'i' 和 'W'。字符大小不等,行的长度不同。另外,我没有看到字体有任何变化。

这是我用来创建 canvas、抽屉和描边文本的代码:

Canvas canvas = new Canvas(800,200);
GraphicsContext drawer = canvas.getGraphicsContext2D();
drawer.setFill(Color.BLACK);
drawer.setFont(new Font("Monospaced",15));

drawer.strokeText("_____", 5, 5);
drawer.strokeText("aaaaa", 5, 25);
drawer.strokeText("iiiii", 5, 45);
drawer.strokeText("WWWWW", 5, 65);

我在 java 中搜索了有关等宽字体的信息,尝试导入 java.awt.Fonts 并查看了 GraphicsContext 的 java 文档,但似乎没有任何帮助我解决这个问题。

我做错了什么?

我会在这里回答我自己的问题,因为我找到了解决这个问题的方法。我不知道是什么导致了这个问题,所以仍然非常欢迎回答。然而,这似乎是治愈方法:

drawer.setFont(Font.font(java.awt.Font.MONOSPACED,15));

非常感谢!

new Font(String name, double size) 根据字体的 全名 字体大小 创建字体。 Font.font(String family, double size) 根据 字体系列名称 字体大小 .

创建字体

您的姓氏是 "Monospaced" (java.awt.Font.MONOSPACED), 全名是"Monospaced Regular",我平台上的文件名是Windows 是 C:\Windows\Fonts\cour.ttf (Courier New).

我比较喜欢

drawer.setFont(Font.font("Monospaced", 15));

但是

drawer.setFont(new Font("Monospaced Regular", 15));

drawer.setFont(Font.loadFont(Files.newInputStream(Paths.get("C:/Windows/Fonts/cour.ttf")), 15));

也有效。