-1

问题:我想让 GraphicContext 对象以等宽字体描边文本。如何做到这一点?

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

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

为了测试字体,我让 GraphicsContext 对象在各自的行上绘制了 5 次字符“_”、“a”、“i”和“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,但似乎没有什么能帮助我解决这个问题。

我究竟做错了什么?

4

2 回答 2

0

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

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

非常感谢你!

于 2020-05-02T00:57:45.783 回答
0

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

也可以。

于 2020-05-03T15:27:20.830 回答