我无法让 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));
也有效。
问题: 我希望 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));
也有效。