上贴:
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 );//方框,乱码 

解决方案 »

  1.   

    我编写的JAVA程序中的Swing/AWT组件中的中文显示都是方框,而标题却能正常显示中文,且使用   System.out.println("中文字符串")能正常显示中文;
        解决思路:
        可能是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"字体,从而就不会存在中文乱码了,也省却了对所有组件单独设置的麻烦。
      

  2.   

    谢谢兄弟啦,解决了,出现中文,哈哈!明天给你分,可以+100,不过问题缘由是什么了?对于其他非英语编码,是否也如此?
    终于看到了中文,我试过n中方式,你这个方法,在网上看到过,但还是失败,后来有点差距。
    就是需要用到
    g.setFont(new Font("宋体", Font.PLAIN, 12));
    给graphicis设置中文字体。谢谢,200分是最多的,但实在太少,不成敬意。
      

  3.   

    不是乱码问题,是字体不对,试试在 drawString 前先 setFont(new Font("宋体", Font.PLAIN, 30));。
    见 http://topic.csdn.net/u/20080602/20/ac26e643-f4cb-4b0e-bf5c-e8c7bc8d8649.html
      

  4.   

    贴段代码,显示系统所有字体:import java.awt.Font;
    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++;
    }
    }
    }
      

  5.   

    下面代码是载入字体文件的程序:
    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();

    这两天的一些收获,与大家共享!
      

  6.   

    楼主如果对 Java GUI 设计比较感兴趣,可以看看《Swing Hacks》一书,读过,里面有非常多的 GUI 设计鬼点子,例如创建不规则窗口等,CSDN上也有下载,网址:http://d.download.csdn.net/down/212245/syhhl007,书目录:http://www.oreilly.com.cn/book.php?m=toc&bn=978-7-302-14334-5另外楼主分享的代码很好用,收藏了!
      

  7.   

    看楼主个人空间才发现,注册时间 2001-12-22,看了 Blog 发现同样是被 5.12 汶川地震震醒的,相信地震震醒了很多中国人,多难兴邦,没错!看到楼主已经另一贴给过分了,分无所谓,问题解决了就好,看来 CSDN 一三角的老鸟和一星的新手一样多,专家分真的说明不了什么,除了热心程度!
      

  8.   

    我很早以前就来,由于各种原因,很少上CSDN,希望大家多多交流,有问题也可联系我,:)!