Проблема в том, что JTextArea использует шрифт по умолчанию, отличный от JTextField. У меня была такая же проблема в приложении, которое я написал, которое должно было поддерживать несколько языков.
Причина вашей проблемы в том, что JTextArea обычно используется для отображения моноширинного шрифта, такого как Courier New. Обычно Java не содержит дополнительных отображений для моноширинного графического шрифта для отображения кандзи.
Исправление у вас работает, потому что нет шрифта с именем «123», поэтому берется значение по умолчанию (диалог). Шрифт "dialog" внутренне сопоставлен с семейством шрифтов в файле font.properties вашей платформы. Это будет тот же шрифт, который использует JTextField.
У меня есть следующее исправление, чтобы гарантировать, что одно и то же определение шрифта используется во ВСЕХ графических компонентах. Вы также можете найти специальный ключ для JTextArea и изменить его. Таким образом, вам не нужно беспокоиться о шрифтах любого компонента, они будут инициализированы с помощью диалога.
Object fontDefinition = new UIDefaults.ProxyLazyValue("javax.swing.plaf.FontUIResource", null, new Object[] { "dialog", new Integer(Font.PLAIN), new Integer(12) });
java.util.Enumeration keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof javax.swing.plaf.FontUIResource) {
UIManager.put(key, fontDefinition);
}
}