删除矩形JavaFX之间的间距

Remove spacing between rectangles JavaFX

我正在 Java 中开发 ASCII 图形引擎,以模拟终端图形,而无需处理实际终端的一些麻烦。

一个关键因素是为角色的背景着色。所以在每个位置,我都放了一个矩形作为背景色,还有一个文本对象,它代表一个字符(使用 monospace 字体)。

我试过使用 FlowPanes、TilePanes、GridPanes,但常规窗格似乎效果最好(达到最小间距)。这是一张显示当前问题的图片:Screenshot

我正在尝试使所有矩形对齐,使得 space 看不到背景。在上面链接的图像中,彩色矩形之间不应有黑色脊线。

这是我为每个 "pixel" 添加矩形和文本的代码(这只是一个名为 Char 的 class,它包含一个矩形和一个文本对象)。

for (int x = 0; x < COLUMNS; x++)
    for (int y = 0; y < ROWS; y++)
        pixels[x][y] = new Char(pane, paddingX + x * width, paddingY + y * height, width, height);

高度和宽度是在此块之前计算的,并根据使用的字体确定。它们代表任何字符的宽度和高度,因为使用的字体是 monospace。 padding只是一个用来居中的数字"pixels",也是在嵌套循环之前确定的。

字符 class:

private Text ch;
private Rectangle background;

Char(Pane pane, double x, double y, double w, double h) {
    ch = new Text();
    ch.relocate(x, y);
    ch.setFont(View.font);
    ch.setFill(Color.WHITE);

    background = new Rectangle(w, h, Color.BLACK);
    background.relocate(x, y);

    ch.setBoundsType(TextBoundsType.VISUAL);

    pane.getChildren().addAll(background, ch);
}

这是一个舍入问题。可以通过确保使用完整的位置和大小来修复它。

在下面的代码中,您将 xynxny 的分配替换为注释中的分配会导致可见的间隙,但会更改 wh 到整数值,例如10,也防止了可见的间隙:

@Override
public void start(Stage primaryStage) {
    double w = 10.5;
    double h = 10.5;

    Pane pane = new Pane();

    for (int i = 0; i < 57; i++) {
        for (int j = 0; j < 57; j++) {
            double x = Math.floor(i * w);
            double y = Math.floor(j * h);
            double nx = Math.floor((i + 1) * w);
            double ny = Math.floor((j + 1) * h);
//            double x = i * w;
//            double y = j * h;
//            double nx = (i + 1) * w;
//            double ny = (j + 1) * h;
            Rectangle rect = new Rectangle(x, y, nx - x, ny - y);
            rect.setFill(Color.BLACK);
            pane.getChildren().add(rect);
        }
    }

    primaryStage.setScene(new Scene(pane, 600, 600));
    primaryStage.show();
}