簡體   English   中英

JavaFX線段寬度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM