Как отформатировать текст в 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));