关于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));
}
}
}
分享到:
相关推荐
JTable使用TableModel实现数据绑定的示例,以及常用JTable时间处理中,如何获取当前选中行,选中行其他数据等。
主要解决: 把jtable设置为只能选择一行,但是按下Ctrl+A以后,table会自动把选择迁移到最后一行. 如何不让焦点自动迁移?给了个人的一个简单的实现。
11.1 JTable表格组件; 11.1.1 JTable表格组件 ; 11.1.1 JTable表格组件 ;11.1.2 学生实践练习;11.1.2 学生实践练习;11.2 菜单组件; 11.2.1 菜单组件 ; 11.2.1 菜单组件 ; 11.2.1 菜单组件 ; 11.2.1 菜单组件 ;...
用法: myTableModel=new ResultSetTableModel(m_Rs); sorterTableModel = new SortTableModel... sorterTableModel.addMouseListenerToHeaderInTable(jTable1); jTable1.setModel(sorterTableModel);
在实际开发中,我们经常需要处理大量的数据,然而,如果我们将所有数据一次性加载到表格中,将会对应用程序的性能产生巨大影响。这时,分页机制将会发挥重要作用。通过分页,我们可以将大量数据拆分成多个小的数据块...
电影简单的电影数据库应用程序。 使用 JTable GUI 组件显示来自 Derby 数据库的数据 Custom TableModel 处理在 GUI 中显示来自表的数据。
* 在界面中主要使用JTable的处理,表现层、业务层与数据访问层的分层结构, 大大减低了各层之间的代码耦合。 * 在表现层中简单的使用了模板方法这种设计模式,将各个界面中的共同点提取到父类进行处理。 ...
Java中jtable的操作,jxl的运用,,在jtable上直接修改添加,jtree节点的事件处理。
例如,`private JTable table = new JTable(dtm);`这一行代码就创建了一个表格组件。 知识点3: 事件处理 在该设计源码中,我们可以看到事件处理的知识点。例如,`implements ActionListener, MouseListener`这一行...
SupermarketManagementSystem类是一个JFrame窗口,包含了添加产品、编辑产品和删除产品的按钮,以及一个JTable表格用于显示产品信息。程序通过initializeComponents方法初始化组件,通过initializeLayout方法设置...
JDK6的新特性之六_插入式注解处理API JDK6的新特性之九_CommonAnnotations JDK6的新特性之十_Web服务元数据 JDK6的新特性之十一_更简单强大的JAX-WS JDK6的新特性之十三_JTable的排序和过滤 JDK6的新特性之...
javax.swing.table 提供用于处理 javax.swing.JTable 的类和接口。 javax.swing.text 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html 提供类 HTMLEditorKit 和创建 HTML 文本编辑...
这里是我最近学习swing编程中用到的一些demo JTable CURD 事件绑定 进度条 线程处理等等demo,总之作为新手的你,看这个demo你可以学到很多。这里还采用了2-3中布局方式实现布局,由于项目其他保密性,这里只是一个...
该应用程序可以处理比Microsoft Excel 1更长的行。 该应用程序的目的是在数据分析之前查看大型CSV文件以了解数据。 该应用程序利用工作线程将CSV数据添加到表中。 Model类的每个实例都将数据添加到DefaultTableModel...
实例7 Java servlet中对模板文件的处理 实例10 在Java应用程序中播放Midi音乐 实例13 基于Java语言的多线程同步机制 实例14 Java程序中的多线程实现 实例15 利用Java的多线程技术实现并行多任务的管理 ...
javax.swing.table 提供用于处理 javax.swing.JTable 的类和接口。 javax.swing.text 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html 提供类 HTMLEditorKit 和创建 HTML 文本编辑器...
javax.swing.table 提供用于处理 javax.swing.JTable 的类和接口。 javax.swing.text 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html 提供类 HTMLEditorKit 和创建 HTML 文本编辑器...
javax.swing.table 提供用于处理 javax.swing.JTable 的类和接口。 javax.swing.text 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html 提供类 HTMLEditorKit 和创建 HTML 文本编辑器...
javax.swing.table 提供用于处理 javax.swing.JTable 的类和接口。 javax.swing.text 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类。 javax.swing.text.html 提供类 HTMLEditorKit 和创建 HTML 文本编辑器...