显示日语字符时,JTextArea的行为很奇怪- 我得到了众所周知的空白矩形而不是汉字。最奇怪的是,JTextField完美地显示了它们(在两种情况下,我都使用“ Tahoma”字体家族)。另外,如果我输入以下代码:
Font f = new Font("123", Font.PLAIN, 12); // This font doesn't exists problemTextArea.setFont(f);
…在我将日语字符串写入问题文本区域之前,它显示汉字!
PS对不起,我的英语。
Upd: 我正在使用Windows
问题在于JTextArea使用的默认字体与JTextField不同。在我编写的必须支持多语言的应用程序中,我遇到了同样的问题。
问题的原因是JTextArea通常用于显示等宽字体,例如Courier New。通常,Java不包含用于显示汉字的等间距图形字体的其他映射。
您所拥有的修复程序有效,因为没有名为“ 123”的字体,因此采用了默认设置(对话框)。“对话框”字体在内部映射到平台的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); } }