JavaFX 8 strokeText 意外行为
JavaFX 8 strokeText unexpected behaviour
strokeText 使用 setLineWidth 作为笔画的宽度。但是,如果我将 lineWidth 设置为 0.0(期望笔画为 0.0,即根本没有笔画),它实际上会使用先前设置的 lineWidth 来描边文本。因此,尽管有明确的 gc.setLineWidth(0.0);,笔划值将被忽略并使用之前设置的值。这是一个例子:
Canvas fieldCanvas = new Canvas(400, 400);
gc = fieldCanvas.getGraphicsContext2D();
gc.setFill(Color.YELLOW);
gc.setStroke(Color.RED);
gc.setLineWidth(10.0);
gc.fillRect(50, 50, 350, 150);
gc.strokeRect(50, 50, 350, 150);
gc.setFont(Font.font("Arial", 100));
gc.setFill(Color.GREEN);
gc.setStroke(Color.BLACK);
gc.setLineWidth(0.0);
gc.fillText("TEST", 100, 160);
gc.strokeText("TEST", 100, 160);
这将描边值为 10.0 的文本
JAVA FX8 文档指出:超出范围 (0, +inf) 的无穷大或非正值将被忽略,当前值将保持不变。
但这似乎也包括 0 本身。所以任何值都必须 > 0 而不是 == 0。
文档应该更清楚还是我在这里遗漏了什么?
文档可以更清楚,这意味着排他范围。这是当前的实现:
* Sets the current line width.
*
* @param lw value in the range {0-positive infinity}, with any other value
* being ignored and leaving the value unchanged.
*/
public void setLineWidth(double lw) {
// Per W3C spec: On setting, zero, negative, infinite, and NaN
// values must be ignored, leaving the value unchanged
if (lw > 0 && lw < Double.POSITIVE_INFINITY) {
如评论所示,这似乎遵循 Canvas 规范,其行为相同,您可以在浏览器中尝试类似的操作 -
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.lineWidth = 30;
ctx.lineWidth = 0;
ctx.strokeRect(20, 20, 80, 100);
这给了你一个胖矩形。
strokeText 使用 setLineWidth 作为笔画的宽度。但是,如果我将 lineWidth 设置为 0.0(期望笔画为 0.0,即根本没有笔画),它实际上会使用先前设置的 lineWidth 来描边文本。因此,尽管有明确的 gc.setLineWidth(0.0);,笔划值将被忽略并使用之前设置的值。这是一个例子:
Canvas fieldCanvas = new Canvas(400, 400);
gc = fieldCanvas.getGraphicsContext2D();
gc.setFill(Color.YELLOW);
gc.setStroke(Color.RED);
gc.setLineWidth(10.0);
gc.fillRect(50, 50, 350, 150);
gc.strokeRect(50, 50, 350, 150);
gc.setFont(Font.font("Arial", 100));
gc.setFill(Color.GREEN);
gc.setStroke(Color.BLACK);
gc.setLineWidth(0.0);
gc.fillText("TEST", 100, 160);
gc.strokeText("TEST", 100, 160);
这将描边值为 10.0 的文本
JAVA FX8 文档指出:超出范围 (0, +inf) 的无穷大或非正值将被忽略,当前值将保持不变。
但这似乎也包括 0 本身。所以任何值都必须 > 0 而不是 == 0。
文档应该更清楚还是我在这里遗漏了什么?
文档可以更清楚,这意味着排他范围。这是当前的实现:
* Sets the current line width.
*
* @param lw value in the range {0-positive infinity}, with any other value
* being ignored and leaving the value unchanged.
*/
public void setLineWidth(double lw) {
// Per W3C spec: On setting, zero, negative, infinite, and NaN
// values must be ignored, leaving the value unchanged
if (lw > 0 && lw < Double.POSITIVE_INFINITY) {
如评论所示,这似乎遵循 Canvas 规范,其行为相同,您可以在浏览器中尝试类似的操作 -
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.lineWidth = 30;
ctx.lineWidth = 0;
ctx.strokeRect(20, 20, 80, 100);
这给了你一个胖矩形。