本人是从JTable开始学习Java的,尝到了JTable与TableModel配合的甜头后,让我对Java死心塌
地,当然有时偶尔也会用用Delphi。
随着程序的深入,我发现JTable的功能越来越不能满足需求了,这里想向大家请教一下JTable的较复杂的使用。
1、JTable的值变化响应事件如何实现,tableChanged方法写起来麻烦不说,死循环似乎也不能得到很方便有效地解决。死循环的原因如表中有三列:单价、件数、总计。当我输入件数时计算总计,输入总计时计算件数。这类需求很常见,不知道都用的什么妙计解决的。我是在TableModel中实现的,但是代码写得太死,扩展或修改不太容易。
2、多表头。这个可能是表格使用中最常用到的,涉及到表各种数据统计,多表头可能是最好的表现形式。到现在我没发现任何一种通用的多表头,不知道有没有人有这类代码。其实多表头要实现也不难,难的是随着的一些附属功能,如导出数据。如果谁有比较好用的多表头实现方式,而且能提供较方便得导出功能,望赐教,谢谢。
3、表格数据的导入,批量数据输入时,客户会苦苦哀求要导入功能。poi导入我确实有点嫌他太大,不知道还有什么简单好用的导入方式没?
4、表头列任意变换。这个也常遇到,我的实现方式是修改表模型中列,这样的话原有的表格绘制器得重新设置,不知道有没有更好的方法。
至于表格与数据库记录对应维护,表中单元格的合并,我通过网络都已经找到了比较好地解决方案。这里就不说了,如果有兴趣可以一起讨论。
鲜花鸡蛋无所谓,参与讨论者,有分。
地,当然有时偶尔也会用用Delphi。
随着程序的深入,我发现JTable的功能越来越不能满足需求了,这里想向大家请教一下JTable的较复杂的使用。
1、JTable的值变化响应事件如何实现,tableChanged方法写起来麻烦不说,死循环似乎也不能得到很方便有效地解决。死循环的原因如表中有三列:单价、件数、总计。当我输入件数时计算总计,输入总计时计算件数。这类需求很常见,不知道都用的什么妙计解决的。我是在TableModel中实现的,但是代码写得太死,扩展或修改不太容易。
2、多表头。这个可能是表格使用中最常用到的,涉及到表各种数据统计,多表头可能是最好的表现形式。到现在我没发现任何一种通用的多表头,不知道有没有人有这类代码。其实多表头要实现也不难,难的是随着的一些附属功能,如导出数据。如果谁有比较好用的多表头实现方式,而且能提供较方便得导出功能,望赐教,谢谢。
3、表格数据的导入,批量数据输入时,客户会苦苦哀求要导入功能。poi导入我确实有点嫌他太大,不知道还有什么简单好用的导入方式没?
4、表头列任意变换。这个也常遇到,我的实现方式是修改表模型中列,这样的话原有的表格绘制器得重新设置,不知道有没有更好的方法。
至于表格与数据库记录对应维护,表中单元格的合并,我通过网络都已经找到了比较好地解决方案。这里就不说了,如果有兴趣可以一起讨论。
鲜花鸡蛋无所谓,参与讨论者,有分。
3的问题是比较棘手,如果客户比较通融,可以采取先用excel生成带有分隔符的txt文本文件,之后就好处理了,另外excel是可以直接导入一些数据库的还有jxl也可以尝试,没有用过,不发表意见4、没有实现,应该要新定义TableColumn对象
(2)改写TableModel,自己写一个mySetValueAt,代码则是setValueAt的代码去掉fire什么的那行,也就是不发出通知。用此法表格也不会自动刷新,请自行使用JTable.Repaint();刷新
2、多表头。什么意思?没看懂。
3、表格数据与xls的互导,用POI,不算太麻烦。两层for,不到20行代码。
4、表头列任意变换。DefaultTableModel.setColumnIdentifiers(Object[] col),要不要重新设置render,不太清楚
合并单元格我不会,望赐教
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Vector;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;public class jTable extends JFrame {
JTable table = new JTable();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null; public jTable() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); //驱动申明
con = DriverManager.getConnection(
"jdbc:oracle:thin:@cdfn01:1521:cdfn01", "erpcn", "erpcn"); //建立链接
String sql = "select * from emp"; //查询语句
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
} catch (Exception e) {
System.out.println(e.toString());
}
((DefaultTableModel) table.getModel()).setDataVector(getdata(),
gettitle());
JScrollPane jsp = new JScrollPane(table);
getContentPane().add(jsp);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
} private Vector gettitle() {
try {
ResultSetMetaData rsm = rs.getMetaData();
Vector title = new Vector();
for (int i = 1; i <= rsm.getColumnCount(); i++) {
title.add(rsm.getColumnName(i));
}
return title;
} catch (Exception e) {
System.out.println(e.toString());
}
return new Vector();
} private Vector getdata() {
try {
ResultSetMetaData rsm = rs.getMetaData();
Vector data = new Vector();
while (rs.next()) {
Vector row = new Vector();
for (int i = 1; i <= rsm.getColumnCount(); i++) {
row.add(rs.getObject(i));
}
data.add(row);
}
return data;
} catch (Exception e) {
System.out.println(e.toString());
}
return new Vector();
} public static void main(String args[]) {
new jTable();
}
}
我也差不多是从JTable开始做界面的
tableHeader
tableModel
tableCellRenderer
tableSorter
tablerCellEditor
....
treeTable
.....
每完成新需求时,都感觉又长进了不少,有时甚至觉得自己去table了如指掌了,但后来总是发现还很多地方自己没注意到的...现在觉得JTree还要复杂,太过于臃肿了
这几天老板要求多行tableHeader及他们的合并,头疼死了
Cell的合并刚找到例子还没看懂呢,又来Header的
跟vector配合着用
还是不太明白。
好多功能都不会实现
希望大家能提供些资料及源码
谢谢