Как отформатировать текст в JTextArea

Я пытаюсь вывести несколько строк текста, чтобы создать искусство ASCII. Но когда я использую JFrame и JTextArea, он выстраивается неправильно. Я пытаюсь напечатать " Счастливого Рождества" в искусстве ASCII. Но когда я печатаю его в новом окне, символы не выстраиваются в линию, чтобы сформировать слова. Это мой текущий код (в искусстве ASCII будут некоторые символы, которые бесполезны):

public class LanguageChristmas  {


    public static void main(String args[]) {
        UIManager.put("swing.boldMetal", Boolean.FALSE);
        JFrame f = new JFrame("Merry Christmas");
        f.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        JTextArea text = new JTextArea(100,50);
         {
            text.append("   _____                               _________ .__          .__          __                                           "+ "\n");
            text.append("  /     \\   __________________ ___.__. \\_   ___ \\|  |_________|__| _______/  |_  _____ _____    ______   /     \\ " + "\n");
            text.append(" /  \\ /  \\_/ __ \\_  __ \\_  __ <   |  | /    \\  \\/|  |  \\_  __ \\  |/  ___/\\   __\\/     \\\\__  \\  /  ___/  /  \\ / " + "\n");
            text.append("/    Y    \\  ___/|  | \\/|  | \\/\\___  | \\     \\___|   Y  \\  | \\/  |\\___ \\  |  | |  Y Y  \\/ __ \\_\\___ \\  /    Y    " + "\n");
            text.append("\\____|__  /\\___  >__|   |__|   / ____|  \\______  /___|  /__|  |__/____  > |__| |__|_|  (____  /____  > " + "\n");
            text.append("        \\/     \\/              \\/              \\/     \\/              \\/             \\/     \\/     \\/           " + "\n");

        }
        JScrollPane pane = new JScrollPane(text);
        pane.setPreferredSize(new Dimension(500,400));
        f.add("Center", pane);
               f.pack();
        f.setVisible(true);
    }
}`

Я искал вокруг и не нашел решения этой проблемы. Любая помощь полезна.

1 ответ

Решение

Проблема в том, что по умолчанию в текстовой области используется шрифт переменной ширины. Изменение шрифта на моноширинный решит проблему, например

   text.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
Другие вопросы по тегам