Le problème est que JTextArea utilise une autre police par défaut que JTextField. J'ai eu le même problème dans une application que j'ai écrite qui devait supporter plusieurs langues.
La raison de votre problème est que JTextArea est normalement utilisé pour afficher une police mono-espacée, telle que Courier New. Normalement Java ne contient aucun mappage supplémentaire pour une police graphique mono-espacée pour afficher Kanji.
Le correctif que vous avez fonctionne, car il n'y a pas de police nommée "123", donc la valeur par défaut est prise (boîte de dialogue). La police "dialog" est mappée en interne à une famille de polices dans le fichier font.properties de votre plate-forme. Ce sera la même police que JTextField utilise.
J'ai le correctif suivant, pour m'assurer que la même définition de police est utilisée dans TOUS les composants graphiques. Vous pouvez également trouver la clé spécifique pour JTextArea et la modifier. De cette façon, vous n'avez pas à vous soucier des polices d'un composant, elles seront initialisées avec un dialogue.
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);
}
}
Quelle plateforme utilisez-vous? Les fenêtres? Linux? – Peter