当str具有韩文字符时,java jlabel setText(str)是错误的

时间:2012-10-16 10:10:13

标签: java swing utf-8 internationalization jlabel

我正在研究应该支持英语,俄语和韩语的Java应用程序。

所以我为每种语言准备了unicode属性文件。然后我使用bundle中的_ function获取一些String值,将其设置为

  • 的JLabel
  • 的JTextArea


InputStream stream = LocaleManager.class.getClassLoader().getResourceAsStream(path);
ResourceBundle bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));

public static String _(String key) {
    return bundle.getString(key);
}

对于英语和俄语,它完美无缺。对于韩国JTextArea正确显示韩国字符,但JLabel没有。它显示了正方形,在Eclipse控制台中显示了??,但俄罗斯字符可以在Eclipse控制台中正确显示。

看起来像JLabel的问题。

1 个答案:

答案 0 :(得分:4)

由于@mKorbel很容易发现问题出在JLabel字体上。

在应用程序启动时,从Locale.getDefault()中识别语言或要求用户选择。 然后根据所选语言生成选择.properties文件的路径。

在我放的韩语语言文件中(我使用Eclipse AnyEdit插件)     游泳= \ u0412 \ u043e \ u0434 \ u043d \ u043e \ u0435     运行= \ u0411 \ u044b \ u0441 \ u0442 \ u0440 \ u043e \ u0435

InputStream stream = LocaleManager.class.getClassLoader().getResourceAsStream(path);
ResourceBundle bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));

//get internationalized version for "Swimming"
String str = _("Swimming");

//create and configure JLabel
JLabel label = new JLabel();
label.setVisible(true);
label.setBackground(Color.yellow);
label.setOpaque(true);

//this line was the issue
label.setFont(new Font("Verdana", Font.PLAIN, 14));

//setting text which results in squares
label.setText(str);