jtable的一些处理

关于jtable显示汉字时乱码:table.setFont(new Font("SimSun", 0, 14));//或者宋体

问题解决

 

 

/**  
    *   <p>Title:   JTable自动换行、自动调整宽度</p>  
    *   <p>Description:   让JTable单元格可以自动换行、自动调整宽度以适合单元格内容</p>  
    *   <p>Copyright:   Beyond   DayBreak   Office   Copyright   (c)   2004</p>  
    *   <p>Company:   www.EchoChina.net</p>  
    *   @author   YuLimin  
    *   @version   1.0  
    */  
   
  import   java.awt.Dimension;  
  import   java.awt.Toolkit;  
  import   javax.swing.UIManager;  
   
  public   class   TableDemo  
  {  
          //构造函数  
          public   TableDemo()  
          {  
                  //表格处理类  
                  TableDemoFrame   frame   =   new   TableDemoFrame();  
                  //测试数据内容:\n表示要强制进行换行!  
                  String   strContent   =   "中华人民共和国\n1234567890中华人民China,共和国CN中华人民\n共\n和\n国\n中华人民共和国福建省莆田市荔城区黄石镇常溪居委会常溪50号,俞黎敏!";  
                  //表头:列的显示名称  
                  String[]   vColumnNames   =  
                          {"姓名","生日","部门","备注"};  
                  //测试显示行的数据内容  
                  String[][]   vRowData   =  
                          {  
                          {"YuLimin","1976.02.02","Develop",strContent}  
                          ,  
                          {"Echo","1976.02.02","Sale","中华人民共和国是一个伟大的国家!"}  
                          ,  
                          {"俞姿妍","2003.10.12","Baby","我的小可爱!"}  
                          ,  
                          {"俞黎敏","1976.02.02","Software","第一行\n第二行\n\n第四行\n\n\n儿童团团长\n经常率团打篮球\n哈哈哈"}  
                          ,  
                          {"JDK   Version","1995.01.01","Software","JDK   Version\n1.2.2"}  
                  };  
                  try  
                  {  
                          //显示数据于表格中  
                          frame.showDataToTable(vColumnNames,vRowData);  
                          //显示表格出来  
                          frame.showTableDemoFrame();  
                  }  
                  catch(Exception   e)  
                  {  
                          e.printStackTrace();  
                  }  
                  //让窗口居中  
                  Dimension   screenSize   =   Toolkit.getDefaultToolkit().getScreenSize();  
                  Dimension   frameSize   =   frame.getSize();  
                  if(frameSize.height   >   screenSize.height)  
                  {  
                          frameSize.height   =   screenSize.height;  
                  }  
                  if(frameSize.width   >   screenSize.width)  
                  {  
                          frameSize.width   =   screenSize.width;  
                  }  
                  frame.setLocation((screenSize.width   -   frameSize.width)   /   2,(screenSize.height   -   frameSize.height)   /   2);  
                  frame.setVisible(true);  
          }  
   
          //主函数:测试运行之!  
          public   static   void   main(String[]   args)  
          {  
                  try  
                  {  
                          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());  
                  }  
                  catch(Exception   e)  
                  {  
                          e.printStackTrace();  
                  }  
                  new   TableDemo();  
          }  
  }

 

/**  
    *   <p>Title:   汉字分行处理</p>  
    *   <p>Description:   汉字分行处理</p>  
    *   <p>Copyright:   Beyond   DayBreak   Office   Copyright   (c)   2004</p>  
    *   <p>Company:   www.EchoChina.net</p>  
    *   @author   YuLimin  
    *   @version   1.0  
    */  
   
  import   java.util.Vector;  
   
  public   class   Sinogram  
  {  
          //字符集声明  
          private   String   CharacterSet   =   "8859_1";  
   
          /**  
            *   setCharacterSet  
            *  
            *   @param   CharacterSet   String  
            */  
          public   void   setCharacterSet(String   CharacterSet)  
          {  
                  this.CharacterSet   =   CharacterSet;  
          }  
   
          /**  
            *   getCharacterSet  
            *  
            *   @return   String  
            */  
          public   String   getCharacterSet()  
          {  
                  return   CharacterSet;  
          }  
   
          /**  
            *   getSinogram  
            *  
            *   @param   str   String  
            *   @param   iLen   int  
            *   @return   Vector  
            */  
          public   Vector   getSinogram(String   str,int   iLen)   throws   Exception  
          {  
                  String   strBytes   =   new   String(str.getBytes(),CharacterSet);  
                  int   len   =   new   String(str.getBytes(),CharacterSet).length();  
                  //System.out.println(str   +   "==>>总长度为:"   +   len);  
                  char   c;  
                  String   strTemp   =   "";  
                  Vector   v   =   new   Vector();  
                  StringBuffer   strbuf   =   new   StringBuffer();  
                  int   j   =   0;  
                  for(int   i   =   0;i   <   len;i++)  
                  {  
                          strTemp   =   strBytes.substring(i,i   +   1);  
                          c   =   strTemp.charAt(0);  
                          if(c   >   '\u0080')   //即:>0x80的为汉字!  
                          {  
                                  strTemp   =   strBytes.substring(i,i   +   2);  
                                  i++;  
                                  strbuf.append(new   String(strTemp.getBytes(CharacterSet)));  
                                  //System.out.print(new   String(strTemp.getBytes(CharacterSet)));  
                                  j   +=   2;  
                          }  
                          else  
                          {  
                                  strbuf.append(c);  
                                  //System.out.print(c);  
                                  j++;  
                          }  
                          if(j   >=   iLen)  
                          {  
                                  j   =   0;  
                                  v.addElement(strbuf.toString());  
                                  strbuf   =   new   StringBuffer();  
                          }  
                  }  
                  v.addElement(strbuf.toString());  
                  return   v;  
          }  
   
          /**  
            *   用getBytes(encoding):返回字符串的一个byte数组  
            *   当b[0]为   63时,应该是转码错误  
            *   A、不乱码的汉字字符串:  
            *   1、encoding用GB2312时,每byte是负数;  
            *   2、encoding用ISO8859_1时,b[i]全是63。  
            *   B、乱码的汉字字符串:  
            *   1、encoding用ISO8859_1时,每byte也是负数;  
            *   2、encoding用GB2312时,b[i]大部分是63。  
            *   C、英文字符串  
            *   1、encoding用ISO8859_1和GB2312时,每byte都大于0;  
            *   <p/>  
            *   总结:给定一个字符串,用getBytes("iso8859_1")  
            *   1、如果b[i]有63,不用转码;   A-2  
            *   2、如果b[i]全大于0,那么为英文字符串,不用转码;   B-1  
            *   3、如果b[i]有小于0的,那么已经乱码,要转码。   C-1  
            */  
          private   static   String   toGb2312(String   str)  
          {  
                  if(str   ==   null)  
                  {  
                          return   null;  
                  }  
                  String   retStr   =   str;  
                  byte   b[];  
                  try  
                  {  
                          b   =   str.getBytes("ISO8859_1");  
   
                          for(int   i   =   0;i   <   b.length;i++)  
                          {  
                                  byte   b1   =   b[i];  
                                  if(b1   ==   63)  
                                  {  
                                          break;   //1  
                                  }  
                                  else  
                                  {  
                                          if(b1   >   0)  
                                          {  
                                                  continue;   //2  
                                          }  
                                          else  
                                          {  
                                                  if(b1   <   0)  
                                                  {  
                                                          //不可能为0,0为字符串结束符  
                                                          retStr   =   new   String(b,"GB2312");  
                                                          break;  
                                                  }  
                                          }  
                                  }  
                          }  
                  }  
                  catch(Exception   e)  
                  {  
                          e.printStackTrace();  
                  }  
                  return   retStr;  
          }  
   
          //主函数:测试运行之!  
          public   static   void   main(String[]   args)   throws   Exception  
          {  
                  Sinogram   sinogram   =   new   Sinogram();  
                  String   str   =   "iAM俞黎敏in,赫赫,351100福建省莆田市荔城区黄石镇常溪居委会常溪50号";  
   
                  //测试显示每行2个字!  
                  Vector   v   =   sinogram.getSinogram(str,2);  
                  for(int   j   =   0;j   <   v.size();j++)  
                  {  
                          System.out.println(v.elementAt(j));  
                  }  
          }  
  }  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值