是否可以用Java编写一个能够正确显示日文字体的GUI,无论其运行的操作系统的语言设置如何?
我想写一个能够做到这一点的程序,但我不知道如何开始这个。任何建议都将是一个巨大的帮助!
答案 0 :(得分:7)
这里的语言设置不是问题。字体是。
Java当然可以处理日文文本,无论系统设置是什么,如果开发人员不使用FileReader
或{{1}之类的内容而陷入依赖于平台默认编码的陷阱}。
但是要实际显示日文文本,您需要一个包含日文字符的字体,而字体不是Java的一部分。根据操作系统的不同,支持日语的字体可能是默认安装的一部分,或者可能会提示用户根据需要安装它们,或者可能必须手动安装它们。
答案 1 :(得分:6)
无论操作系统是否安装了字体,Java都可以轻松显示日语,但这仅适用于Swing应用程序。使用控制台窗口的任何内容都需要在操作系统中安装字体。
步骤:
1)从这里下载其中一种truetype字体:http://www.wazu.jp/gallery/Fonts_Japanese2.html
2)使用以下代码允许您的swing客户端使用您的字体:
InputStream fontStream = getClass().getResourceAsStream("/locationoffontonclasspath/myfontname.ttf");
Font japaneseEnabledFont = null;
boolean japaneseDisplayEnabled = false;
try {
japaneseEnabledFont = Font.createFont(Font.TRUETYPE_FONT, fontStream);
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(japaneseEnabledFont);
japaneseDisplayEnabled = true;
} catch (Exception e) {
// handle exceptions here
} finally {
if (fontStream != null) {
try {fontStream.close();} catch (Exception e1) {}
}
}
if (japaneseDisplayEnabled) {
.....
}
此外,如果您希望在源代码中使用日语文字,则必须使用-Dfile.encoding = utf-8进行编译。如果使用IDE进行编译,则可以在以下屏幕上更改设置(右键单击项目并选择属性以获取此窗口):screenshot
答案 2 :(得分:3)
您可以将TrueType字体打包到程序中并加载并在Swing组件中使用它,如下所示:
// Create a label in Japanese.
String message = "かつ、尊厳と権利とについて平等である。";
JLabel label = new JLabel(message);
// Load the TrueType font with Japanese characters and apply it.
File file = new File("msmincho.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, file);
font = font.deriveFont(Font.PLAIN, 14f);
label.setFont(font);
小心使用正确的字符集。如果在代码中编译日语字符,则应使用javac -encoding utf-8 Foo.java
进行编译。使用Readers时也一定要明确使用charset。
答案 3 :(得分:0)
将-Dfile.encoding=utf-8
添加到启动应用程序的命令行脚本中。
答案 4 :(得分:0)
您可以在$ JAVA_HOME \ jre \ lib \ fonts \ fallback中复制您的truetype日语字体。 您必须创建此文件夹。在linux上,符号链接可以解决问题。
来源:http://www.asahi-net.or.jp/~ik2r-myr/kanji/german/linos_g.htm