我有一些代码可以响应按键,并相应地绘制点和线段。但是,尽管我没有触及代码中的线条笔划宽度,但线段的宽度似乎是交替的。我想知道为什么会这样。
以下是代码:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.scene.shape.Line;
public class DrawLineSegments extends Application {
static double x = 0.0;
static double y = 0.0;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Pane p = new Pane();
Rectangle border = new Rectangle(0, 0, 300, 100);
border.setFill(Color.TRANSPARENT);
Rectangle initialPoint = new Rectangle(border.getWidth() / 2, border.getHeight() / 2, 2, 2);
initialPoint.setFill(Color.BLACK);
x = border.getWidth() / 2;
y = border.getHeight() / 2;
p.getChildren().addAll(border, initialPoint);
p.setOnKeyPressed(e -> {
switch (e.getCode()) {
case UP :
Line upLine = new Line(x + 1, y + 1, x + 1, y + 1 - 7.5);
y = y - 7.5;
upLine.setStroke(Color.BLUEVIOLET);
upLine.setFill(Color.SANDYBROWN);
p.getChildren().add(upLine);
p.getChildren().add(new Rectangle(x, y, 2, 2));
break;
case DOWN :
Line downLine = new Line(x + 1, y + 1, x + 1, y + 1 + 7.5);
y = y + 7.5;
downLine.setStroke(Color.BLUEVIOLET);
downLine.setFill(Color.SANDYBROWN);
p.getChildren().add(downLine);
p.getChildren().add(new Rectangle(x, y, 2, 2));
break;
case LEFT :
Line leftLine = new Line(x - 7.5, y + 1, x + 1, y + 1);
x = x - 7.5;
leftLine.setStroke(Color.BLUEVIOLET);
leftLine.setFill(Color.SANDYBROWN);
p.getChildren().add(leftLine);
p.getChildren().add(new Rectangle(x, y, 2, 2));
break;
case RIGHT :
Line rightLine = new Line(x + 7.5, y + 1, x + 1, y + 1);
x = x + 7.5;
rightLine.setStroke(Color.BLUEVIOLET);
rightLine.setFill(Color.SANDYBROWN);
p.getChildren().add(rightLine);
p.getChildren().add(new Rectangle(x, y, 2, 2));
break;
default:
break;
}
});
Scene scene = new Scene(p);
primaryStage.setScene(scene);
primaryStage.setTitle("Draw Line Segments");
primaryStage.show();
p.requestFocus();
}
}
这张图片可能更好地解释了我的要求:
答案 0 :(得分:1)
您可能需要阅读Coordinate System of a Node
协调系统
Node类定义了传统的计算机图形“本地” x轴向右和y增加的坐标系 轴向下增加。形状的具体节点类提供 用于定义形状的几何和位置的变量 这个局部坐标空间。例如,Rectangle提供x,y, 宽度,高度变量,而Circle提供centerX,centerY和 半径。
在设备像素级别,整数坐标映射到角落 像素和像素中心之间的裂缝出现在 整数像素位置之间的中点。因为所有的坐标 值用浮点数指定,坐标可以 精确指向这些角(当浮点值有 精确整数值)或像素上的任何位置。例如,a 坐标(0.5,0.5)将指向左上角的中心 舞台上的像素。类似地,在(0,0)处具有尺寸的矩形 10乘10将跨越左上角的左上角 舞台上的像素位于第10个像素的右下角 第10条扫描线。那个里面最后一个像素的像素中心 矩形位于坐标处(9.5,9.5)。
关于您的问题:请勿使用7.5。而是使用7或8.