Я работаю над графическим движком ASCII в Java, чтобы эмулировать графику терминала без каких-либо трудностей при работе с реальными терминалами.
Одним из ключевых элементов является окрашивание фона символов.Поэтому в каждой позиции я помещаю прямоугольник, который служит цветом фона, и объект Text, который представляет символ (используя моноширинные шрифты).
Я пробовал использовать FlowPanes, TilePanes, GridPanes, нообычные панели, кажется, работают лучше (достигнут наименьший интервал)Вот изображение, которое показывает проблему под рукой: Снимок экрана
Я пытаюсь выровнять все прямоугольники так, чтобы не было видимого пространства для просмотра на заднем плане.На изображении, связанном выше, между цветными прямоугольниками не должно быть черных ребер.
Вот код, который у меня есть, который добавляет Rectangle и Text для каждого «пикселя» (это просто класс с именем Char, который содержитa Прямоугольник и текстовый объект).
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);
Высота и ширина рассчитываются перед этим блоком и определяются на основе используемого шрифта.Они представляют ширину и высоту любого символа, поскольку используемый шрифт моноширинный.Заполнение - это просто число, используемое для центрирования «пикселей», которое также определяется перед вложенным циклом.
Класс Char:
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);
}