代码之家  ›  专栏  ›  技术社区  ›  Eskat0n

如何在JTextArea中显示日语字符

  •  5
  • Eskat0n  · 技术社区  · 17 年前

    当显示日文字符时,JTextArea有一种奇怪的行为——我得到的是广为人知的空白矩形,而不是汉字。 最奇怪的是JTextField完美地显示了它们(在这两种情况下,我都使用“Tahoma”字体系列)。 另外,如果我把这个代码:

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

    …在我将日语字符串写入problemTextArea之前,它会显示汉字!

    Upd: 我正在使用Windows

    1 回复  |  直到 14 年前
        1
  •  10
  •   Mario Ortegón    17 年前

    问题是JTextArea使用的默认字体与JTextField不同。在我编写的一个必须支持多种语言的应用程序中,我也遇到了同样的问题。

    我有以下修复,以确保在所有图形组件中使用相同的字体定义。您还可以找到JTextArea的特定键并对其进行更改。这样,您就不必担心任何组件的字体,它们将使用dialog进行初始化。

    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);
        }
    }