小编典典

如何在JTextArea中显示日语字符

java

显示日语字符时,JTextArea的行为很奇怪-
我得到了众所周知的空白矩形而不是汉字。最奇怪的是,JTextField完美地显示了它们(在两种情况下,我都使用“
Tahoma”字体家族)。另外,如果我输入以下代码:

    Font f = new Font("123", Font.PLAIN, 12); // This font doesn't exists
    problemTextArea.setFont(f);

…在我将日语字符串写入问题文本区域之前,它显示汉字!

PS对不起,我的英语。

Upd: 我正在使用Windows


阅读 216

收藏
2020-11-01

共1个答案

小编典典

问题在于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);
    }
}
2020-11-01