[英]JavaFX Line segment width
我有一些代碼可以響應按鍵,並相應地繪制點和線段。 但是,即使我不觸摸代碼中的線條筆觸寬度,線段的寬度也似乎是交替的。 我想知道為什么會這樣。
這是代碼:
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();
}
}
也許更好地解釋了我所問的圖像:
坐標系
Node類定義了傳統的計算機圖形“局部”坐標系,其中x軸向右增加,y軸向下增加。 形狀的具體節點類提供變量,以定義該局部坐標空間內形狀的幾何形狀和位置。 例如,矩形提供x,y,寬度,高度變量,而圓形提供centerX,centerY和半徑。
在設備像素級別,整數坐標映射到像素的角和裂縫,並且像素的中心出現在整數像素位置之間的中點。 因為所有坐標值都是用浮點數指定的,所以坐標可以精確地指向這些角(當浮點值具有精確的整數值時)或像素上的任何位置。 例如,坐標(0.5,0.5)將指向舞台上左上像素的中心。 同樣,尺寸為10 x 10的(0,0)處的矩形將從舞台上左上像素的左上角跨到第10條掃描線上第10個像素的右下角。 該矩形內最后一個像素的像素中心將位於坐標(9.5,9.5)。
關於您的問題:請勿使用7.5。 而是使用7或8。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.