El problema es que JTextArea utiliza una fuente predeterminada diferente que JTextField. Tuve el mismo problema en una aplicación que escribí que tenía que admitir varios idiomas.
El motivo de su problema es que JTextArea se usa normalmente para mostrar una fuente monoespaciada, como Courier New. Normalmente Java no contiene asignaciones adicionales para una fuente gráfica monoespaciada para mostrar Kanji.
La corrección que tiene funciona, porque no hay una fuente llamada "123", por lo que se toma el valor predeterminado (diálogo). La fuente de "diálogo" está asignada internamente a una familia de fuentes en el archivo font.properties de su plataforma. Esta será la misma fuente que utiliza JTextField.
Tengo la siguiente solución para garantizar que se utiliza la misma definición de fuente en TODOS los componentes gráficos. También puede encontrar la clave específica para JTextArea y cambiarla. De esta forma, no tiene que preocuparse por las fuentes de ningún componente, se inicializarán con el diálogo.
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);
}
}
¿Qué plataforma está utilizando? Windows? Linux? – Peter