上贴:
http://topic.csdn.net/u/20080602/20/ac26e643-f4cb-4b0e-bf5c-e8c7bc8d8649.html?seed=2105182125
因无分可加,另开贴,散发求解。使用graphics2D,在drawstring方法中,打印中文的时候,出现乱码,不知道怎么解决? 代码很简单,tableName是从一个JDialog文本框输入的中文,如“国文”两字。String tableName = table.getName(); //国文
// System.out.println(tableName);//这里打印显示出-国文g.setColor(Color.BLACK);
g.drawString(tableName, x , y );//方框,乱码
http://topic.csdn.net/u/20080602/20/ac26e643-f4cb-4b0e-bf5c-e8c7bc8d8649.html?seed=2105182125
因无分可加,另开贴,散发求解。使用graphics2D,在drawstring方法中,打印中文的时候,出现乱码,不知道怎么解决? 代码很简单,tableName是从一个JDialog文本框输入的中文,如“国文”两字。String tableName = table.getName(); //国文
// System.out.println(tableName);//这里打印显示出-国文g.setColor(Color.BLACK);
g.drawString(tableName, x , y );//方框,乱码
解决思路:
可能是JRE的中文字库不支持引起,所以添加一个可以支持的中文字库
解决办法:
第一步:下载中文字库,我使用的是simsun.ttc,可以直接在Windows(我用的是XP的系统)中找到,入径为C:\WINDOWS\Fonts下的simsun.ttc
也可以在网站上下载 推荐天网网站:
http://file.tianwang.com/cgi-bin/search?word=simsun.ttc 第二步:将中文字库simsun.ttc放入Jre的字库中,操作如下:
cd <JAVA_HOME>/lib/fonts或者cd <JAVA_HOME>/jre/lib/fonts
mkdir fallback (fallback代表存放后备语言的文件夹)
其中<JAVA_HOME>是你安装jdk/jre的路径,我的是/usr/lib/jdk1.5。复制或者链接一个中文字体至其下:
ln -s /usr/share/fonts/truetype/simsun.ttf /usr/lib/jdk1.5/jre/lib/fonts/fallback/simsun.ttf 第三步:有了上面的步骤之后,就可以在代码中编码实现显示中文了,操作如下:
在main 函数中的开头处添加如下代码:
Font f = new Font("宋体",Font.PLAIN,12);
UIManager.put("Label.font",f);
UIManager.put("Label.foreground",Color.black);
UIManager.put("Button.font",f);
UIManager.put("Menu.font",f);
UIManager.put("MenuItem.font",f);
UIManager.put("List.font",f);
UIManager.put("CheckBox.font",f);
UIManager.put("RadioButton.font",f);
UIManager.put("ComboBox.font",f);
UIManager.put("TextArea.font",f);
UIManager.put("EditorPane.font",f);
UIManager.put("ScrollPane.font",f);
UIManager.put("ToolTip.font",f);
UIManager.put("TextField.font",f);
UIManager.put("TableHeader.font",f);
UIManager.put("Table.font",f); 以上代码代表了在整个程序中的相关组件都使用定义好"f"字体,从而就不会存在中文乱码了,也省却了对所有组件单独设置的麻烦。
终于看到了中文,我试过n中方式,你这个方法,在网上看到过,但还是失败,后来有点差距。
就是需要用到
g.setFont(new Font("宋体", Font.PLAIN, 12));
给graphicis设置中文字体。谢谢,200分是最多的,但实在太少,不成敬意。
见 http://topic.csdn.net/u/20080602/20/ac26e643-f4cb-4b0e-bf5c-e8c7bc8d8649.html
import java.awt.GraphicsEnvironment;
import java.util.Vector;public class DisplayFonts {
public static void main(String[] args) {
// Determine which fonts support Chinese here ...
Vector chinesefonts = new Vector();
Font[] allfonts = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAllFonts();
int fontcount = 0;
String chinesesample = "\u4e00";
for (int j = 0; j < allfonts.length; j++) {
System.out.println(j+"-"+allfonts[j].getFontName());
if (allfonts[j].canDisplayUpTo(chinesesample) == -1) {
chinesefonts.add(allfonts[j].getFontName());
}
fontcount++;
}
}
}
File file = new java.io.File(System.getProperty("user.dir") + "/font/simsun.ttf");
if (!file.exists()) {
System.out.println("file not found");
return ;
}
try {
java.io.FileInputStream fi = new java.io.FileInputStream(file);
java.io.BufferedInputStream fb = new java.io.BufferedInputStream(fi);
// Font nf = Font.createFont(Font.TRUETYPE_FONT, fb);
// nf = nf.deriveFont(Font.TRUETYPE_FONT, 12);
// System.out.println(nf.getFontName());
//
// Font f = new Font("宋体",Font.PLAIN,12);
// UIManager.put("Label.font",f);
// UIManager.put("Label.foreground",Color.black);
// UIManager.put("Button.font",f);
// UIManager.put("Menu.font",f);
// UIManager.put("MenuItem.font",f);
// UIManager.put("List.font",f);
// UIManager.put("CheckBox.font",f);
// UIManager.put("RadioButton.font",f);
// UIManager.put("ComboBox.font",f);
// UIManager.put("TextArea.font",f);
// UIManager.put("EditorPane.font",f);
// UIManager.put("ScrollPane.font",f);
// UIManager.put("ToolTip.font",f);
// UIManager.put("TextField.font",f);
// UIManager.put("TableHeader.font",f);
// UIManager.put("Table.font",f);
//
// UIConstants.CUSTOM_FONT = nf ;
// UIConstants.CUSTOM_FONT = new Font("宋体", Font.PLAIN, 12) ;
} catch (Exception e) {
e.printStackTrace();
}
这两天的一些收获,与大家共享!