我无法让JavaFX GraphicsContext strokeText()正确显示单空格字体



问题:我希望GraphicContext对象以单空格字体绘制文本。如何做到这一点?

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

然而,当我检查画布上绘制的文本时,我每次都会看到:画布对象左角的屏幕截图。

为了测试字体,我让GraphicsContext对象在自己的行中分别添加5个字符"_"、"a"、"I"one_answers"W"。字符大小不同,行的长度也不同。此外,我没有看到字体有任何变化。

这是我用来创建画布、抽屉和抚摸文本的代码:

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的javadoc,但似乎没有什么能帮助我解决这个问题。

我做错了什么?

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

在您的情况下,家族名称为CCD_,全名是"Monospaced Regular",在我的Windows平台上的文件名是CCD_ 5。

我更喜欢

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));

同样有效。

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

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

非常感谢!

相关内容

  • 没有找到相关文章

最新更新