关于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));
}
}
}