关于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`更具交互性,开发者还可以使用`MouseListener`和`KeyBindings`来处理用户的鼠标点击和键盘输入事件。`ActionListener`则可以用来处理表格中的按钮或菜单项的点击事件。 总的来说,这个"JTable 练习...
`vTable.java`可能包含自定义的`TableModel`实现,而`Frame1.java`则可能负责创建`JFrame`窗口,并在其中添加`JTable`,以及处理与数据库的交互。 具体到`ResultSet`的使用,我们需要关注几个关键的方法: - `...
在处理`JTable`时,我们有时需要使其单元格内容支持自动换行,以便更好地显示长文本。标题“JTable自动换行”正是指向这个功能,即如何在`JTable`的单元格内实现文本的自动换行。 默认情况下,`JTable`的单元格使用...
以下是对`JTable`的深入解析,包括其构造、属性、事件处理以及如何在实际项目中应用。 #### 类层次结构 `JTable`继承自`JComponent`,其类层次结构如下: ``` java.lang.Object -- java.awt.Component -- java....
JTable的一些关键方法包括: - `getTableHeader()`: 获取表格的列头组件。 - `setPreferredScrollableViewportSize(Dimension size)`: 设置表格在滚动视口中的理想大小。 - `addMouseListener(MouseListener ...
当我们需要从Excel文件中读取数据并展示在JTable上时,就需要进行一系列的处理步骤。以下是一些关于如何实现这个过程的关键知识点: 1. **Excel文件处理**: - **Apache POI库**:在Java中,我们通常使用Apache ...
开发者只需要定义控制器方法来处理数据请求,jtable 将自动处理前端展示和用户交互。 - **数据源**:使用 MVC 控制器返回 JSON 数据,jtable 负责解析并渲染到表格中。 - **动作方法**:定义如 `LoadTable`, `...
通过jtble和tree这两个文件名,我们可以推测压缩包内可能包含了一些关于JTree和JTable的具体实现示例代码。这些代码可能涵盖了更复杂的功能,比如自定义渲染器、拖放操作、数据绑定等,学习这些代码可以帮助开发者更...
`JTable`能够处理表格数据的显示、编辑以及用户交互。 `JTable`的主要构造函数有以下几个: 1. `JTable()`: 创建一个使用系统默认`Model`的新`JTable`。 2. `JTable(int numRows, int numColumns)`: 创建一个指定...
`JTable`的核心在于`TableModel`,它定义了数据模型,负责处理表格的数据和结构。 2. **创建`JTable`** 创建`JTable`需要提供一个`TableModel`。最基本的`TableModel`是`DefaultTableModel`,它可以动态地添加、...
jTable通过JSON数据与服务器进行交互,通常结合ASP.NET MVC的Controller来处理这些请求。在MVC应用中,你需要创建一个Controller,定义相关的Action,这些Action将返回jTable所需的JSON数据。 **2. 创建 jTable ...
`AbstractTableModel`是`TableModel`的一个抽象实现,为开发者提供了一些基本的方法实现,如获取行数、列数以及单元格数据,简化了模型的创建过程。 `AbstractTableModel`需要重写以下几个关键方法: 1. `...
3. **设置RowSorter到JTable**:将`RowSorter`设置到`JTable`上,`JTable`会自动处理排序逻辑。 ```java JTable table = new JTable(new DefaultTableModel()); table.setAutoCreateRowSorter(true); ...
在Java Swing库中,`JTable`是一个非常重要的组件,用于展示二维数据表格。当我们需要在`JTable`中实现更复杂的交互,比如在一个单元格内放置多个按钮时,这通常涉及到自定义`TableCellRenderer`和`TableCellEditor`...
在Java Swing库中,`JTree`和`...在实际应用中,你可能还需要考虑其他因素,例如错误处理、用户交互设计、性能优化等。通过这个示例,开发者可以学习到如何有效地组合和使用Swing组件,以创建功能丰富的图形用户界面。
在Java Swing应用中,`JTable`是一...在实际开发中,你可能还需要处理一些边缘情况,比如拖动到表头或表的外部,以及优化视觉反馈,例如在拖动时高亮显示目标行。但总的来说,这个方法提供了一个快速且有效的解决方案。
在Java Swing库中,JTable是一个非常重要的组件,用于显示和操作二维数据集。这个组件在用户界面设计中广泛使用,因为它提供了丰富的交互性,包括排序、选择和编辑表格数据。"复杂JTable-跨列表头"是一个特殊实现,...
`JTable`可以由`TableModel`驱动,该模型负责处理数据的逻辑,包括获取和设置单元格值,以及监听数据变化。 **2. JDBC简介** `JDBC`是Java语言访问数据库的标准接口,它允许Java程序与各种数据库进行通信。通过`...
在Java Swing库中,`JTable`是一个非常重要的组件,用于在GUI应用程序中展示二维数据。它是基于模型-视图-控制器(MVC)架构设计的,使得数据操作变得灵活且易于管理。本篇文章将深入探讨`JTable`如何操作单元格、行...
这些事件可以通过JTable的API来捕获和处理。 6. 实践项目:Java连连看 Java连连看是一个基于JTable组件的游戏项目。该项目需要实现一个JTable组件,展示游戏的数据对象,并添加游戏的逻辑和事件响应。该项目可以...