JavaFX : draw sharp thin lines

标签 java javafx

我想知道如何使用 JavaFX 绘制清晰的细线。我希望我的线条是黑色的,1 像素高。这是我目前拥有的:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            root.setSnapToPixel(true);
            Scene scene = new Scene(root,400,400);

            Line line = new Line();
            Line line2 = new Line();

            line.setStartX(0.0f);
            line.setEndX(100f);
            line.setStartY(30f);
            line.setEndY(30f);
            line.setStrokeWidth(1f);
            line.setStrokeType(StrokeType.OUTSIDE);
            line.setStroke(Color.BLACK);

            line2.setStartX(50.0f);
            line2.setEndX(200f);
            line2.setStartY(100f);
            line2.setEndY(100f);
            line2.setStrokeWidth(1f);
            line2.setStrokeType(StrokeType.OUTSIDE);
            line2.setStroke(Color.BLACK);

            root.getChildren().addAll(line, line2);

            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这是我得到的:

result

线条很粗,调用 setStrokeWidth() 方法的值 < 1 对高度没有影响,但会使黑色淡出。知道如何获得 1 像素高的线吗?

我可以通过使用高度为 1 像素的矩形来实现,但它看起来有点脏。

最佳答案

如果您使用 StrokeType.CENTERED,并以半个单位开始 x/y 值,那么这些线条对我来说就像是细线。

public void start(Stage primaryStage) {
    try {
        BorderPane root = new BorderPane();
        root.setSnapToPixel(true);
        Scene scene = new Scene(root, 400, 400);

        Line line = new Line();
        Line line2 = new Line();

        line.setStartX(0.5);
        line.setEndX(100.5);
        line.setStartY(30.5);
        line.setEndY(30.5);
        line.setStrokeWidth(1.0);
        line.setStrokeType(StrokeType.CENTERED);
        line.setStroke(Color.BLACK);

        line2.setStartX(50.5);
        line2.setEndX(200.5);
        line2.setStartY(100.5);
        line2.setEndY(100.5);
        line2.setStrokeWidth(1.0);
        line2.setStrokeType(StrokeType.CENTERED);
        line2.setStroke(Color.BLACK);

        root.getChildren().addAll(line, line2);

        primaryStage.setScene(scene);
        primaryStage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

我的猜测是 JavaFX 中的单位编号用于像素的角,因此指定 location + 0.5 会将线置于所述像素的中间。

关于JavaFX : draw sharp thin lines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32594556/

相关文章:

java - Android Sqlite db.insert 带 null

java - 从类路径外的目录加载资源时出现 NPE

javafx 应用程序中 java.awt.Desktop.isDesktopSupported 返回 false

controller - 具有多个不同 Controller 的 JavaFX 1 FXML 文件?

java - 180 度和 270 度不调用 onConfigurationChanged

Java HashSet 重复项比较

java - 为什么我的菜单栏不显示在此 vbox 布局中?

javafx - 与自定义 CellFactory 节点交互将行添加到 TableView 选择列表中?

java - Neo4j 匹配...UPSERT 的合并密码语法正在返回(无行)

java - 在 Java/JRI 代码中加载 R 自己创建的库时出现问题